简体   繁体   English

如何解决Maven插件内部的Maven依赖关系?

[英]How to resolve maven dependencies inside the maven plugin?

Im trying to use ArtifactResolver.resolve(ArtifactResolutionRequest) with flag resolveTransitively=true and it takes 10min for separated module of my project. 我正在尝试使用带有标志resolveTransitively = true的 ArtifactResolver.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);

If i just build it with mvn it takes ~4sec. 如果我只是用mvn构建它,大约需要4秒。

How maven resolve all transitive dependencies before compile and how to use it in code? Maven如何在编译之前解决所有传递依赖关系,以及如何在代码中使用它?

//The separate module of project heavily use parents, import dependencies and finally have 350 dependency artifacts. //项目的单独模块大量使用父项,导入依赖项,最后有350个依赖项。 So may it be what maven build cuts some processing steps or ArtifactResolver do something additionally? 那么这可能是Maven构建削减了某些处理步骤还是ArtifactResolver额外做了一些事情?

This is the code I use to resolve an artifact and get a File reference to it: 这是我用来解析工件并获得文件引用的代码:

// 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();

The repositories references are class-level attributes which are resolved via dependency inject in maven. 存储库引用是类级别的属性,可通过maven中的依赖项注入来解析。 You just need to declare them in your class: 您只需要在您的类中声明它们:

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM