2012-07-11 81 views
4

我覺得這個問題有點愚蠢,但我無法弄清楚如何將SINGLE依賴項(jdom.jar)添加到另一個jar中。如何使用maven和fatjar插件將單個依賴項包含到jar中

上下文:我們爲我們的應用程序開發了一個簡單的插件,這個插件有很多依賴項。我們使用fatjar將jdom.jar包含進去。我正試圖修復這個插件中的一個bug,所以我決定在同一時間「maven化」它。 (我們只是切換到maven)這個插件在運行時加載,所以我們想要打包的唯一依賴是jdom.jar。

問題:我發現有一個maven fatjar插件!不幸的是,我找不到任何文檔,這個maven插件將EVERY依賴項添加到輸出jar中。經過多次嘗試後,我決定放棄這個fatjar插件並搜索另一個插件。我發現一個罐子,陰影,但在他們閱讀後,他們看起來像他們添加每個依賴項。

問:你會是一個簡單的辦法只能jdom.jar添加到我的插件jar是這樣的:

 
-MyPlug-in.jar 
| 
|-src 
|-main 
    |-java 
    |-*.java 
|-jdom.jar 

我也不想改變清單或輸出罐子名

非常感謝您的時間。

回答

8

這裏沒有關於如何使用maven將maven-shader-plugin包含一個jar文件的答案。我花了一些時間才弄清楚如何真正做到這一點。這裏是一個片段,僅包含來自依賴項com.googlecode.json-simple:json-simple的類。

<project> 
    ... 
    <build> 
     <plugins> 
      ... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.6</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
           <includes> 
            <include>com.googlecode.json-simple:json-simple</include> 
           </includes> 
          </artifactSet> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      ... 
     </plugins> 
    </build> 
    ... 
</project> 
+0

正是我所需要的,即使在版本2.4.3中,這個stil也能完美地工作。我在各種''變體上遇到了困難,但最終''artifactSet />'而不是''成功了。 – 2016-05-08 18:58:56

0

對於這種目的,我會建議使用maven-shade-plugin這將創建一個ueber罐,可以通過多種方式進行控制。 隨着shade plugin you can exclude things你不喜歡。但是這可能是由於沒有使用單獨的Maven模塊來控制依賴關係。

+0

謝謝你的回答。我知道我的方向是正確的,但我們終於決定以另一種方式進行。看到我的答案。 – drgn 2012-07-12 13:58:40

0

使用maven Shade可以正常工作,單罐也可以完成這項工作。 但是我們最終決定在我們的擴展中封裝jdom將是一種不好的做法。

所以不是我們該怎麼做:

 
|-Root application Folder 
|-Extension Folder 
    |-MyExtension.jar 
    |-libs Folder 
    |-jdom.jar 

罐子到將動態加載的lib文件夾,如果分機不能找到合適的庫到庫文件夾將不被加載。

對於那些希望解決我的主要問題的人請查看@khmarbaise答案。

相關問題