繁体   English   中英

Java代码获取Maven依赖图

[英]Java Code to get Maven Dependency Graph

我正在研究的程序的要求之一是,我需要能够浏览存储库中多个工件的Maven依赖关系,以便为它们创建依赖关系图。 虽然很明显Maven和Eclipse Aether可以做到这一点(因为Maven的很大一部分正在获得依赖关系),但是我很难确定如何在Java程序中做到这一点。

有什么建议么?

根据文档显示 ,以太似乎可以提供帮助。 甚至还有一个示例演示了如何使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM