Программно получить все зависимости Maven

Как я могу очень простым способом получить все прямые и транзитивные зависимости для данного Maven POM в моей собственной программе Java?

Я знаю о существующих вопросах в Stackoverflow, особенно об использовании Ivy для разрешения зависимостей. Я ищу решение с использованием Maven, которое также может разрешать транзитивные зависимости.


person Oliver    schedule 13.12.2020    source источник
comment
Первый вопрос: с какой целью? Можете ли вы объяснить, каково намерение или проблему, которую вы пытаетесь решить?   -  person khmarbaise    schedule 13.12.2020
comment
У меня есть приложение Java, которое должно анализировать дерево зависимостей данного POM. Приложение является частью нашего инструментария выпуска для jQAssistant.   -  person Oliver    schedule 18.12.2020


Ответы (2)


Если вам это нужно во время сборки Maven, вы можете легко получить к нему доступ в плагине Maven, используя project.getDependencies().

Если у вас есть отдельная программа на Java, вы можете использовать преобразователь Maven или более старые библиотеки Aether для выполнения разрешения.

person J Fabian Meier    schedule 13.12.2020
comment
У вас есть рабочий пример использования распознавателя Maven? - person Oliver; 18.12.2020
comment
Возможно, мой старый вопрос/ответ является отправной точкой: stackoverflow.com/a/48582332/927493 - person J Fabian Meier; 18.12.2020

Теперь я смог решить проблему с помощью JBoss Shrinkwrap.

Вот вырезанный код, похожий на тот, который я сейчас использую в своих инструментах:

MavenStrategyStage resolve = 
    Maven.configureResolver()
         // do not consult Maven Central or any other repository
         .workOffline()
         // import the configuration of the given settings.xml
         .fromFile(homeDir + "/jqa-release-environment/maven-settings.xml")
         // load the POM you would like to analyse
         .loadPomFromFile(pomFile)
         .importCompileAndRuntimeDependencies()
         .importRuntimeAndTestDependencies()
         .resolve();

MavenWorkingSession mavenWorkingSession = 
    ((MavenWorkingSessionContainer) resolve).getMavenWorkingSession();

List<MavenDependency> dependencies = new ArrayList<>();
dependencies.addAll(mavenWorkingSession.getDependenciesForResolution());
dependencies.addAll(mavenWorkingSession.getDependencyManagement());

Чтобы иметь возможность использовать Shrinkwrap, я добавил в свой POM следующие зависимости.

<dependency>
    <groupId>org.jboss.shrinkwrap.resolver</groupId>
    <artifactId>shrinkwrap-resolver-depchain</artifactId>
    <type>pom</type>
    <version>3.1.4</version>
</dependency>
<dependency>
    <groupId>org.jboss.shrinkwrap.resolver</groupId>
    <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
    <version>3.1.4</version>
</dependency>
<dependency>
    <groupId>org.jboss.shrinkwrap.resolver</groupId>
    <artifactId>shrinkwrap-resolver-api-maven</artifactId>
    <version>3.1.4</version>
</dependency>
person Oliver    schedule 21.12.2020