我正在开发的程序的要求之一是我需要能够查看存储库中多个工件的 Maven 依赖关系,以便为它们创建依赖关系图。虽然很明显 Maven 和 Eclipse Aether 可以做到这一点(因为 Maven 的很大一部分正在获得依赖项),但我很难弄清楚如何在 Java 程序中做到这一点。
有什么建议么?
我正在开发的程序的要求之一是我需要能够查看存储库中多个工件的 Maven 依赖关系,以便为它们创建依赖关系图。虽然很明显 Maven 和 Eclipse Aether 可以做到这一点(因为 Maven 的很大一部分正在获得依赖项),但我很难弄清楚如何在 Java 程序中做到这一点。
有什么建议么?
根据文档,Aether 似乎可以提供帮助。甚至还有一个示例演示了如何使用 Aether 来收集工件的传递依赖项。结合这里的 Maven API 示例,我认为你可以到达你想要的地方。
有几种方法可以实现这一点,或者使用 Eclipse 之类的 IDE……或者您可以使用 maven-dependency-plugin 直接打印到控制台中……
mvn dependency:tree
在查看了各种不同的示例和代码之后,我拼凑起来,这似乎有效:
public List<Artifact> fetchArtifactDependencies(final RepositorySystemSession session,
final Artifact artifact,
final DependencyFilter dependencyFilter)
throws RepositoryException {
final CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(new Dependency(artifact, "compile"));
collectRequest.addRepository([repository]);
final DependencyNode node = repositorySystem.collectDependencies(session, collectRequest)
.getRoot();
final DependencyRequest dependencyRequest = new DependencyRequest();
dependencyRequest.setRoot(node);
dependencyRequest.setFilter(dependencyFilter);
final DependencyResult dependencyResult = repositorySystem.resolveDependencies(session,
dependencyRequest);
final List<ArtifactResult> artifactResults = dependencyResult.getArtifactResults();
final List<Artifact> results = new ArrayList<>(artifactResults.size());
CollectionUtils.collect(artifactResults, new Transformer<ArtifactResult, Artifact>() {
@Override
public Artifact transform(final ArtifactResult input) {
return input.getArtifact();
}
}, results);
return results;
}