2013-05-10 39 views
1

如何使用Aether获取MavenProject(包括传递式项目)的所有依赖项?使用Aether获取MavenProject的所有依赖关系(包括传递的依赖项)

我见过很多例子,你指定gav它解决了工件和它的所有依赖关系。这很好。但是,如果你的插件应该从你试图解决的依赖关系的项目中调用,这似乎不起作用(或者我做错了)。有人请给我一个如何做的例子吗?

我试过用jcabi-aether在this SO post中显示的例子。

回答

1

尝试使用实用工具类Classpathjcabi-aether

Collection<File> jars = new Classpath(
    this.getProject(), 
    new File(this.session.getLocalRepository().getBasedir()), 
    "test" // the scope you're interested in 
); 

你会得到这是在当前Maven项目的插件是在“测试”范围的JAR文件和目录的列表

如果你有兴趣获得的Artifact列表s,而不是File S,直接使用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)); 
} 
+0

我在看你的项目。有两件事:1)你的'源'工件似乎没有被正确打包(我看你是通过程序集插件打包的,但是它为工件生成的目录结构是这样的,IDE无法识别源,因为它们'不要在根目录中,而是 - 在$ {project.artifactId}/src/main/java'中; 2)这是一个很好的例子,我会进一步研究它。你能否告诉我如何获得'Artifact'-s而不是直接使用'File'-s?谢谢! – carlspring 2013-05-21 10:59:39

+0

如果你将第一个问题提交给github(https://github.com/yegor256/jcabi/issues?state=open),我会尽快解决它。对于第二个问题,请参阅我的答案,更新 – yegor256 2013-05-21 13:05:10

+0

谢谢!我已经接受了你的回答,并给你赏金。一个小小的评论:上面的粘贴代码不能编译,它需要一个'File'对象,而不是'String'。它另外概述了使用你的库做事的正确方法。也许你可以在你的例子中抛光它,以便有人在将来不会怀疑。 – carlspring 2013-05-23 13:57:43

相关问题