我正在開發一個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 –