我正在尝试使用带有标志 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);
如果我只是用 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/