2011-06-17 109 views
2

這應該是很簡單的,但我不能左右它。我需要使用第三方罐子創建一個uberjar。我已經遵循了這些指示:Including a non-Mavenized dependency so it works with maven-shade-plugin並將它們添加到本地存儲庫。但現在呢?每個Maven教程/示例都有點陰暗(雙關語意思),我只是不知道如何正確編輯.pom文件才能使其工作。在新的Maven:用窗簾插件和第三方jar文件

再說,我感到困惑的陰影「插件」的整體。我的意思是,我遵循了基本的Maven教程,並且一切都很好。但是當我查看陰影插件頁面時,除了源代碼外,我找不到它來下載。我的意思是,它不是一個插件嗎?我不應該下載二進制文件並以某種方式將其安裝到Maven中?

對不起極端noobish問題,但是,不用說,我知道關於Maven蹲下。

回答

0

如果您已經下載了二進制文件和安裝他們到你的本地倉庫剩下的工作就是將它們聲明爲在POM依賴關係。如果陰影插件也是在POM中聲明的,一個簡單的「mvn install」應該在目標目錄中生成一個獨立的JAR。

5

要創建陰影(尤伯杯)的容器,你只需要聲明樹蔭插件,在pom.xml

關於燈罩插件的安裝,只需在您的pom.xmlplugins部分聲明它即可滿足您的所有需求。 Maven插件沒有手動安裝,而是由Maven自動下載(如果尚未下載,就像依賴項一樣),存儲在本地存儲庫中,並在項目需要時使用。

至於使用它,就像其他插件一樣,通過在您的配置需求中添加<plugin>元素,在您的pom.xml中聲明它。這個插件不會自動執行任何操作(有的執行,有的不執行) - 必須指定要執行哪個「目標」(認爲是「類的方法」),以及在哪個「階段」(認爲構建過程的「階段」 )。除非你有奇怪的需求,否則在「包裝」階段指定「陰影」目標(見下文)。

有關更多配置可能性,請參閱shade usage頁面及其示例(尤其是selecting contents for uber jar)。這是一個簡單的例子,當你運行mvn package時,用超級jar替換你的原始jar在target/目錄中。它只包含運行時依賴項,而不包括測試時使用的依賴項(注意junit依賴項的<scope>元素,它不包含在uber jar中)。

<project> 
    <groupId>com.sample</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0</version> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>1.5</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>com.sample</groupId> 
     <artifactId>test-core</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project>