gpt4 book ai didi

java - 莫乔发展。如何遍历托管依赖项?

转载 作者:行者123 更新时间:2023-11-30 11:22:05 25 4
gpt4 key购买 nike

我们正在开发一个框架,想要发布a BOM(bill of material) like Spring 4 does .在这个主要的 pom.xml 中,我们组件的所有版本都列为托管依赖项。因为我们有很多组件,所以我们想检查我们的任何组件是否在我们的其他组件中列出了两个不同的版本。

在内部使用 BOM 或创建第二个内部 BOM 不是解决方案,因为这会导致循环依赖。

现在,我的想法是创建一个遍历所有依赖项并查找重复项的 Maven 插件。我设法通过“正常”依赖项做到了这一点,但对于托管依赖项却没有。

ArtifactFilter myArtifactFilter = new MyArtifactFilter();
rootNode = dependencyTreeBuilder.buildDependencyTree(project, localRepository, artifactFactory, artifactMetadataSource, null, collector);

CollectingDependencyNodeVisitor cdnv = new CollectingDependencyNodeVisitor();
DependencyNodeFilter adnf = new ArtifactDependencyNodeFilter(myArtifactFilter);
DependencyNodeVisitor dnv = new FilteringDependencyNodeVisitor(cdnv, adnf);

rootNode.accept(dnv);

List<DependencyNode> nodes = cdnv.getNodes();

for (int i = 0; i < nodes.size(); i++) {
getLog().info(i + ": " + nodes.get(i).toNodeString());
}

有谁知道如何获取托管依赖项?

最佳答案

我是这样解决的:

List<DependencyNode> allNodes = new ArrayList<DependencyNode>();
DependencyManagement dependencyManagement = project.getDependencyManagement();
List<Dependency> dependencies = dependencyManagement.getDependencies();

getLog().info("found the following managed dependencies:");
for (Dependency dependency : dependencies) {
getLog().info(dependency.toString());
String groupId = dependency.getGroupId();
String artifactId = dependency.getArtifactId();
String version = dependency.getVersion();
String scope = dependency.getScope();
String type = dependency.getType();
Artifact artifact = artifactFactory.createArtifact(groupId, artifactId, version, scope, type);
MavenProject buildFromRepository = mavenProjectBuilder.buildFromRepository(artifact, remoteRepositories, localRepository);
allNodes.addAll(getDependencies(buildFromRepository));
}

问题中的代码移到了返回依赖项列表的 getDependencies() 方法中。

关于java - 莫乔发展。如何遍历托管依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21936789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com