2013-05-30 83 views
0

好吧,我有App.jar作爲我的應用程序的可運行jar。它依賴於更多的罐子,定義應用程序的功能(例如提供3D球體的worldwind.jar)。一種方法如何使其可以運行是提供一個文件夾中所有的罐子設置MANIFEST.MFClass-Path爲:如何將兩個和多個JAR「合併」爲一個?

Class-Path: . 

我會,但是願意,所有的罐子合併成一個。那可能嗎?

+0

如果它不需要太多的工作,你可能會考慮使用Maven來構建你的項目。我相信它會爲你處理這一切。否則,我一直認爲這是一個漫長而容易出錯的過程。 – DaveH

回答

0

是的。

我有一個Ant的簡單例子,如果您使用的是NetBeans:在項目的build.xml中,添加這個目標並根據需要修改命名。

這將合併您的「dist/lib」文件夾中的所有jar和項目的輸出jar,並將它們放在「merged」文件夾中。

你可以很容易地適應你的需要。

然後,您只需要右鍵單擊build.xml文件,「運行目標」,「其他目標」,單擊「合併」。

<target name="merged" depends="jar"> 
     <property name="name" value="yourMergedJar"/> 
     <property name="dir" value="merged"/> 
     <property name="jar" value="${dir}/${name}.jar"/> 
     <echo message="Packaging ${application.title} into a single JAR at ${jar}"/> 
     <delete dir="${dir}"/> 
     <mkdir dir="${dir}"/> 
     <jar destfile="${dir}/temp.jar" filesetmanifest="skip"> 
      <zipgroupfileset dir="dist" includes="*.jar"/> 
      <zipgroupfileset dir="dist/lib" includes="*.jar"/> 
      <manifest> 
       <attribute name="Main-Class" value="${main.class}"/> 
      </manifest> 
     </jar> 
     <zip destfile="${jar}"> 
      <zipfileset src="${dir}/temp.jar" 
      excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/> 
     </zip> 
     <delete file="${dir}/temp.jar"/> 
    </target> 

編輯

正如其他成員說,你可以做到這一點在任何IDE(用Ant或Maven)甚至手動,因爲罐子基本上是zip文件。

+0

我正在使用Eclipse,並且還有一個選項可以使用Ant腳本進行導出。那麼這個腳本XML文件(script.xml)呢? – MichalB

+0

對Eclipse不熟悉Eclipse,但可以從這裏開始:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-81_basics。 HTM – Mena

1

原始回答:因爲jar基本上是一個zip文件,只需打開所需的所有jar文件並將其複製到目標jar中。然而,今天我們通常讓像maven這樣的工具來照顧依賴關係