java - 如何解决 Maven 插件中的 Maven 依赖项?

标签 java maven maven-plugin maven-embedder

我正在尝试使用带有标志 resolveTransitively=trueArtifactResolver.resolve(ArtifactResolutionRequest),我的项目的分离模块需要 10 分钟。

ArtifactResolutionRequest request = new ArtifactResolutionRequest()
        .setArtifact( project.getArtifact() )
        .setArtifactDependencies( project.getDependencyArtifacts() )
        .setLocalRepository( localRepository )
        .setManagedVersionMap( project.getManagedVersionMap() )
        .setForceUpdate(false)
        .setResolveTransitively(true)
        .setOffline(true)
        .setListeners(listeners);
result = artifactResolver.resolve(request);

如果我只是用 mvn 构建它需要大约 4 秒。

maven如何在编译前解析所有传递依赖以及如何在代码中使用它?

//项目的单独模块重度使用parents,导入依赖,最终有350个依赖 Artifact 。那么可能是 maven build 减少了一些处理步骤或者 ArtifactResolver 做了一些额外的事情?

最佳答案

这是我用来解析 Artifact 并获取对它的文件引用的代码:

// get maven artifact representing this mojo artifact
org.apache.maven.artifact.Artifact ma = ...; // create artifact reference
// resolve the maven artifact
try {
    resolver.resolve(ma, remoteRepositories, localRepository );
} catch (ArtifactNotFoundException ex) {
    throw new MojoExecutionException("could not find deploy artifact ["+a+"]", ex);
} catch (ArtifactResolutionException ex) {
    throw new MojoExecutionException("could not resolve deploy artifact ["+a+"]", ex);
}
File maFile = ma.getFile();

存储库引用是类级属性,通过 Maven 中的依赖注入(inject)解析。你只需要在你的类中声明它们:

/** 
 * @parameter default-value="${localRepository}" 
 * @readonly
 * @required
 */
protected ArtifactRepository localRepository;

/** 
 * @parameter default-value="${project.remoteArtifactRepositories}" 
 * @readonly
 * @required
 */
protected java.util.List<ArtifactRepository> remoteRepositories;

关于java - 如何解决 Maven 插件中的 Maven 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9426204/

相关文章:

java - RSA 公钥导出

java - 在 Apache Utils 中读取 CSV 的最佳方式

java - 在 Javafx 中绑定(bind)图像

Maven 无法下载 CoreNLP 模型

java - 使用文件存在忽略我的 Maven 配置文件中的激活(配置文件始终执行)

java - 用于动态更新依赖版本的 Maven 插件/扩展

JAVA - docx中的字体路径而不是字体名称

java - 在 Maven 世界中获取 Spring(和其他库)

定义中 "required"字段的Swagger-codegen实现

java - Maven Surefire 适当使用Exclude