2012-01-21 72 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運行時沒有辦法 –