我正在开发一个Maven插件并使用MavenProject
对象来访问project.getDependencyArtifacts()
的依赖项,但是这给了我所有的jar,甚至只测试了jar。
是否有一些方法可以过滤所有非运行时jar?如果我只是获取范围并比较scope.equals("runtime")
,我将抛弃编译和其他重要依赖项。
答案 0 :(得分:1)
我没有找到现有的方法,所以我使用以下逻辑。这是一个构建自定义ear的插件,它将所需的依赖项添加到xml文件中并将它们包含在归档中。它使用getArtifacts
而不是getDependencyArtifacts
,因为我也对传递依赖感兴趣。
Collection<Artifact> dependencies = new ArrayList<Artifact>();
dependencies.addAll(project.getArtifacts());
for (Iterator<Artifact> it=dependencies.iterator(); it.hasNext(); ) {
Artifact dependency = it.next();
String scope = dependency.getScope();
String type = dependency.getType();
if (dependency.isOptional() || !"jar".equals(type) || "provided".equals(scope) || "test".equals(scope) || "system".equals(scope)) {
getLog().debug("Pruning dependency " + dependency);
it.remove();
}
}