我正在开发一个Maven插件并使用MavenProject
对象来访问我的依赖关系project.getDependencyArtifacts()
,但是这给了我所有的jar,甚至只有测试jar。Maven插件工件过滤器不重要的依赖关系
是否有一些方法来过滤所有非运行时jar?如果我只是得到范围并比较scope.equals("runtime")
,我会抛出编译和其他重要的依赖关系。
我正在开发一个Maven插件并使用MavenProject
对象来访问我的依赖关系project.getDependencyArtifacts()
,但是这给了我所有的jar,甚至只有测试jar。Maven插件工件过滤器不重要的依赖关系
是否有一些方法来过滤所有非运行时jar?如果我只是得到范围并比较scope.equals("runtime")
,我会抛出编译和其他重要的依赖关系。
我没有找到一个现有的方法,因此我使用下面的逻辑。这是一个构建定制耳朵的插件,它将所需的依赖关系添加到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();
}
}
getArtifacts返回一个空集。我在包装阶段的另一个项目中执行它。有没有一些窍门可以让这个工作成为现实 –
@requiresDependencyResolution运行时没有办法 –
你可能想看看Maven War Plugin的源代码。特别是,ArtifactsPackagingTask类处理向战争添加工件:http://svn.apache.org/viewvc/maven/plugins/tags/maven-war-plugin-2.1.1/src/main/java/org /apache/maven/plugin/war/packaging/ArtifactsPackagingTask.java?view=markup –