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

发布于 2025-01-08 17:28:34 字数 817 浏览 5 评论 0原文

我尝试使用带有标志 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如何在编译前解决所有传递依赖以及如何在代码中使用它?

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

Im trying to use ArtifactResolver.resolve(ArtifactResolutionRequest) with flag resolveTransitively=true and it takes 10min for separated module of my project.

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.

How maven resolve all transitive dependencies before compile and how to use it in code?

//The separate module of project heavily use parents, import dependencies and finally have 350 dependency artifacts. So may it be what maven build cuts some processing steps or ArtifactResolver do something additionally?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

送君千里 2025-01-15 17:28:34

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

// 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 中的依赖项注入来解析。你只需要在你的类中声明它们:

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

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

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. 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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文