从 Maven 插件解决项目依赖项

lex*_*ore 7 java maven-plugin maven

我正在编写一个 Maven 插件,它对 Maven 项目中的依赖项进行分析。对于此分析,我需要将项目依赖项传递到文件中。基本上,我需要项目直接或间接使用的所有 JAR 作为本地文件,以便我的插件可以分析它们。

如何在现代 (~3.3.x) Maven 中做到这一点?

我在早期版本中所做的是:

注入了大量的组件和参数。

@Component
protected ArtifactResolver artifactResolver;

@Component
protected ArtifactMetadataSource artifactMetadataSource;

@Component
protected ArtifactFactory artifactFactory;

@Parameter(defaultValue="${localRepository}", required=true, readonly=true)
protected ArtifactRepository localRepository;

@Component(role=MavenProjectBuilder.class)
protected MavenProjectBuilder mavenProjectBuilder;

@Component
protected ArtifactGraphBuilder artifactGraphBuilder;

@Parameter(defaultValue="${project.remoteArtifactRepositories}", required = true, readonly = true)
protected List<ArtifactRepository> remoteArtifactRepositories;

@Parameter( defaultValue = "${project}", readonly = true)
protected MavenProject project;
Run Code Online (Sandbox Code Playgroud)

从依赖项创建工件:

final Set<Artifact> dependencyArtifacts =
    MavenMetadataSource.createArtifacts(artifactFactory,
        project.getDependencies(), "compile", null, project);
Run Code Online (Sandbox Code Playgroud)

使用ArtifactResolver来传递解决工件:

artifactResolver.resolveTransitively(artifacts, originatingArtifact,
        managedVersions, localRepository, remoteRepositories,
        artifactMetadataSource, filter, moreListeners);
Run Code Online (Sandbox Code Playgroud)

我现在正试图将所有这些移到当前的 Maven (3.3.9) 中,突然间几乎所有内容 ( ArtifactMetadataSource, ArtifactFactory, MavenProjectBuilder) 都被弃用了,并且应该使用零通知。