Получить список maven-зависимостей org.apache.maven.project.MavenProject

10

Я пытаюсь получить список зависимостей некоторых артефактов Maven, которые используются org.apache.maven.project.MavenProject.

Мой код такой.

public List<Dependencies> loadProject() {
    Model mavenModel = new Model();
    mavenModel.setModelVersion("4.0.0");
    mavenModel.setGroupId("org");
    mavenModel.setArtifactId("wso2");
    mavenModel.setVersion("1.0.0");

    addDependency(mavenModel, "com.google.inject", "guice", "4.2.2");
    addDependency(mavenModel, "ch.qos.logback", "logback-classic", "1.2.3");

    MavenProject mavenProject = new MavenProject(mavenModel);

    //******* Need to resolve dependencies of `mavenProject` and *******
    //******* get the list of dependencies of this project.    *******

    return dependencies;
}

private static void addDependency(Model mavenModel, String groupId, String artifactId, String version) {


Dependency dependency = new Dependency();
    dependency.setGroupId(groupId);
    dependency.setArtifactId(artifactId);
    dependency.setVersion(version);
    mavenModel.addDependency(dependency);
}

В основном я пытаюсь получить результаты дерева зависимостей, которые возвращаются по mvn dependency:treeкоманде в виде списка программно.

Пример Для артефактов:

  • com.google.inject:guide:4.2.2
  • ch.qos.logback:logback-classic:1.2.3

Список зависимостей:

List = [
com.google.inject:guice:jar:4.2.2:compile,
javax.inject:javax.inject:jar:1:compile,
aopalliance:aopalliance:jar:1.0:compile,
com.google.guava:guava:jar:25.1-android:compile,
com.google.code.findbugs:jsr305:jar:3.0.2:compile,
org.checkerframework:checker-compat-qual:jar:2.0.0:compile,
com.google.errorprone:error_prone_annotations:jar:2.1.3:compile,
com.google.j2objc:j2objc-annotations:jar:1.1:compile,
org.codehaus.mojo:animal-sniffer-annotations:jar:1.14:compile,
ch.qos.logback:logback-classic:jar:1.2.3:compile,
ch.qos.logback:logback-core:jar:1.2.3:compile,
org.slf4j:slf4j-api:jar:1.7.25:compile
]
Прамодя Мендис
источник
На аналогичный вопрос отвечает Тунаки по адресу stackoverflow.com/questions/39638138/…
Nikhil Zurunge,
@NikhilZurunge Но здесь я не хочу создавать проект maven, создавая файл pom. Я хочу использоватьorg.apache.maven.project.MavenProject
Pramodya Mendis
Информация доступна только во время сборки maven, что означает в контексте плагина maven. Если вы просто читаете pom-файл, у вас нет этой информации .... Не существует разрешения для зависимости (если вы используете его) и т. Д.
khmarbaise
Я хочу знать, есть ли какой-либо java-метод или класс для разрешения зависимостей от MavenProjectобъекта
Pramodya Mendis

Ответы:

1

Вы можете использовать метод public Set<Artifact> getArtifacts()вашего MavenProjectкласса, который возвращает набор артефактов, представляющих все зависимости, которые есть у проекта, включая транзитивные.

NB. Содержимое заполнено лениво, поэтому в зависимости от того, какие фазы были запущены, зависимости в некоторых областях не будут включены. например. если запущена только фаза компиляции, зависимости с тестом области не будут включены.

Вся информация взята из документации, которую вы можете найти здесь .

rakwaht
источник
2
Я предполагаю, что вы предполагаете, что код должен выполняться во время сборки Maven (как плагин Maven), но OP хочет запустить его вне запуска Maven.
JF Meier
@JFMeier да, ты прав. Кажется, у меня нет решения для этого
варианта