2012-01-21 37 views
1

我正在开发一个Maven插件并使用MavenProject对象来访问我的依赖关系project.getDependencyArtifacts(),但是这给了我所有的jar,甚至只有测试jar。Maven插件工件过滤器不重要的依赖关系

是否有一些方法来过滤所有非运行时jar?如果我只是得到范围并比较scope.equals("runtime"),我会抛出编译和其他重要的依赖关系。

+0

你可能想看看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 –

回答

1

我没有找到一个现有的方法,因此我使用下面的逻辑。这是一个构建定制耳朵的插件,它将所需的依赖关系添加到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(); 
     } 
    } 
+0

getArtifacts返回一个空集。我在包装阶段的另一个项目中执行它。有没有一些窍门可以让这个工作成为现实 –

+0

@requiresDependencyResolution运行时没有办法 –