在 Maven 3 中,您可以通过依赖 maven-dependency-tree 共享组件以基于树的形式访问所有依赖项:
用于解析 Maven 项目依赖项的基于树的 API。
这个组件引入了DependencyGraphBuilder,它可以为给定的Maven项目构建依赖树。您还可以使用ArtifactFilter 过滤工件,它有几个内置实现可以按 groupId、artifactId(IncludesArtifactFilter 和ExcludesArtifactFilter)、范围(ScopeArtifactFilter)等进行过滤。如果拟合器是 @ 987654328@,保留所有依赖项。
在您的情况下,由于您针对特定工件,您可以添加 IncludesArtifactFilter 与您的工件的模式 groupId:artifactId。示例代码是:
@Mojo(name = "foo")
public class MyMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}", readonly = true, required = true)
private MavenProject project;
@Parameter(defaultValue = "${session}", readonly = true, required = true)
private MavenSession session;
@Component(hint = "default")
private DependencyGraphBuilder dependencyGraphBuilder;
public void execute() throws MojoExecutionException, MojoFailureException {
ArtifactFilter artifactFilter = new IncludesArtifactFilter(Arrays.asList("groupId:artifactId"));
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
buildingRequest.setProject(project);
try {
DependencyNode rootNode = dependencyGraphBuilder.buildDependencyGraph(buildingRequest, artifactFilter);
CollectingDependencyNodeVisitor visitor = new CollectingDependencyNodeVisitor();
rootNode.accept(visitor);
for (DependencyNode node : visitor.getNodes()) {
System.out.println(node.toNodeString());
}
} catch (DependencyGraphBuilderException e) {
throw new MojoExecutionException("Couldn't build dependency graph", e);
}
}
}
这可以访问依赖树的根节点,即当前项目。从该节点,您可以通过调用getChildren() 方法访问所有儿童。因此,如果您想列出所有依赖项,您可以递归地遍历该图。该组件确实提供了使用CollectingDependencyNodeVisitor 执行此操作的工具。它会将所有依赖项收集到List 中,以便轻松循环。
对于 Maven 插件,因此需要以下依赖项:
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-dependency-tree</artifactId>
<version>3.0</version>
</dependency>