【发布时间】:2013-05-10 10:33:54
【问题描述】:
如何使用 Aether 获取 MavenProject 的所有依赖项(包括传递的依赖项)?
我见过很多例子,你指定gav 并解析工件及其所有依赖项。这一切都很好。但是,如果您的插件应该从您试图解决其依赖项的同一个项目中调用,这似乎不起作用(或者也许我做错了)。有人可以给我一个可行的例子吗?
我已经尝试了this SO post 中显示的 jcabi-aether 示例。
【问题讨论】:
如何使用 Aether 获取 MavenProject 的所有依赖项(包括传递的依赖项)?
我见过很多例子,你指定gav 并解析工件及其所有依赖项。这一切都很好。但是,如果您的插件应该从您试图解决其依赖项的同一个项目中调用,这似乎不起作用(或者也许我做错了)。有人可以给我一个可行的例子吗?
我已经尝试了this SO post 中显示的 jcabi-aether 示例。
【问题讨论】:
尝试使用来自jcabi-aether 的实用程序类Classpath:
Collection<File> jars = new Classpath(
this.getProject(),
new File(this.session.getLocalRepository().getBasedir()),
"test" // the scope you're interested in
);
您将获得插件所在的当前 Maven 项目中“测试”范围内的 JAR 和目录列表。
如果您有兴趣获取Artifacts 的列表而不是Files,请直接使用Aether 类:
Aether aether = new Aether(this.getProject(), repo);
Set<Artifact> artifacts = new HashSet<Artifact>();
for (Artifact dep : this.getProject().getDependencyArtifacts()) {
artifacts.addAll(aether.resolve(dep, JavaScopes.COMPILE));
}
【讨论】:
sources 工件似乎没有正确打包(我看到您是通过程序集插件打包它,但是它为工件生成的目录结构使得 IDE 无法识别源代码) re 不在根目录中,而是 -- 在 ${project.artifactId}/src/main/java); 2)这是一个很好的例子,我会进一步研究它。您能否告诉我如何获得Artifact-s 而不是直接使用File-s?谢谢!
File 对象,而不是String。否则,它概述了使用您的库做事的正确方法。也许你可以在你的例子中完善它,以便将来有人不会怀疑。