相关疑难解决方法(0)

如何在插件中访问Maven的依赖关系层次结构

在我的插件中,我需要处理依赖关系层次结构并获取有关每个依赖关系的信息(groupId,artifactId,version等)以及它是否被排除.做这个的最好方式是什么?

maven-plugin maven maven-dependency-plugin aether

36
推荐指数
4
解决办法
2万
查看次数

从 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)

java maven-plugin maven

7
推荐指数
0
解决办法
265
查看次数

如何解决maven插件中所有模块的依赖关系?

我正在编写一个Maven插件来获取已解析的依赖项.它适用于单个模块项目/ pom,但在多个模块项目上失败.

这是一段代码片段

@Mojo(
  name="scan",
  aggregator = true,
  defaultPhase = LifecyclePhase.COMPILE,
  threadSafe = true,
  requiresDependencyCollection = ResolutionScope.TEST,
  requiresDependencyResolution = ResolutionScope.TEST,
  requiresOnline = true
)
public class MyMojo extends AbstractMojo {

  @Parameter(property = "project", required = true, readonly = true)
  private MavenProject project;

  @Parameter(property = "reactorProjects", required = true, readonly = true)
  private List<MavenProject> reactorProjects;


  @Override
  public void execute() throws MojoExecutionException {
    for(MavenProject p : reactorProjects) {
      for(Artifact a : p.getArtifacts()) {
         ...consolidate artifacts
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将整合所有模块中所有已解析的依赖项,但它包含一些额外的依赖项.

这是一个可以使用的示例项目.请下载此github …

maven-plugin maven maven-assembly-plugin

3
推荐指数
1
解决办法
653
查看次数