2012-01-16 77 views
13

我正在使用maven-shade-plugin對於一個簡單的maven項目,插件成功地將所有依賴關係包含到最終的「陰影」jar中。這個過程每次都運行良好,併產生我所需要的。使用maven-shade-plugin時多餘的警告

當運行「第一個」時間(在clean之後)時,該插件很安靜並且產生很少的輸出。但是,如果重新運行(沒有上一次構建的clean),則會出現許多警告消息;

[WARNING] We have a duplicate package/a/b/foo.class 
[WARNING] We have a duplicate package/c/d/bar.class 

這只是警告信息,並最終神器工作正常。

我的問題很簡單:我怎樣才能安全地解決或抑制這些警告消息,而不必首先運行clean


注:一個可能的解決方案是移動到Maven的組裝插件,但我寧願不要因爲行家遮陽簾插件的配置是非常好的,簡單。

+1

我假設報告的重複是所有依賴類,對不對?在這種情況下,它們很可能首先被提取到某個文件夾,因此您可能希望在包階段之前或之後爲這些文件夾添加一個乾淨的步驟(具體取決於是否需要這些構建之間的類)。 – Thomas 2012-01-16 13:10:12

+0

我有和上面一樣的問題...如何抑制警告。在我的情況下,我包含了許多我無法控制的Spring包裝瓶的依賴關係 - 即我以前無法「清理」。 – 2012-04-03 18:07:23

+0

這正是我的問題! [哦,親愛的!](http://xkcd.com/979/) – plasma147 2012-06-13 11:43:24

回答

10

這是因爲它將文件着色到已經着色的jar中。

第一次在乾淨後運行包然後它會創建jar。 第二次運行它時,它不會打擾,因爲jar已經存在。

從樹蔭插件的角度來看,它不知道這已經被陰影所以它只是試圖再次添加類。

我們可以強制行家通過配置罐子插件創建的jar每次:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
    <forceCreation>true</forceCreation> 
    </configuration> 
</plugin> 

這對我的作品。要麼或只是做一個乾淨的安裝

+0

感謝您的提示,煩人,但它的作品。 – 2012-10-04 20:08:07

+0

謝謝你。有沒有另一種方式讓插件使用'原始'罐子?我不明白'maven-jar-plugin'和'maven-shade-plugin'之間的動態 – 2016-05-25 22:37:23