以编程方式检索所有 Maven 依赖项
Programmatically retrieve all Maven dependencies
如何在我自己的 Java 程序中以非常简单的方式检索给定 Maven POM 的所有直接和传递依赖项?
我知道 Whosebug 上存在的问题,尤其是使用 Ivy 解决依赖关系的问题。我正在寻找使用 Maven 的解决方案,它还能够解决传递依赖关系。
如果您在 Maven 构建期间需要它,您可以使用 project.getDependencies()
在 Maven 插件中轻松访问它。
如果您有一个独立的 Java 程序,您可以使用 Maven 解析器或旧的 Aether 库来进行解析。
我现在可以使用 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>
如何在我自己的 Java 程序中以非常简单的方式检索给定 Maven POM 的所有直接和传递依赖项?
我知道 Whosebug 上存在的问题,尤其是使用 Ivy 解决依赖关系的问题。我正在寻找使用 Maven 的解决方案,它还能够解决传递依赖关系。
如果您在 Maven 构建期间需要它,您可以使用 project.getDependencies()
在 Maven 插件中轻松访问它。
如果您有一个独立的 Java 程序,您可以使用 Maven 解析器或旧的 Aether 库来进行解析。
我现在可以使用 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>