2016-10-04 73 views
0

我已經發現了合併jar文件的不同描述,如Fat-jar。合併Jar文件?

但是我尋找一個更簡單的解決方案,就像下面的例子。

罐子-cmvf ../manifest.m ˚FMyJar.jar LIB * /罐

也許有人知道正確的語法兩個或更多瓶合併成一個?

它被合併但文件無法執行。


增加類的JAR文件的類路徑

您可能需要引用從一個JAR文件中的其他JAR文件的類。

例如,在典型的情況下,applet捆綁在JAR文件中,其JAR文件的清單引用了不同的JAR文件(或多個不同的JAR文件),作爲該applet的實用工具。

指定要包含在applet或應用程序的清單文件的Class-Path頭字段中的類。在類路徑頭採用以下形式:

Class-Path: jar1-name jar2-name directory-name/jar3-name 

通過在manifest使用Class-Path頭,你可以避免調用java運行應用程序時,指定一個長-classpath標誌。 注意:Class-Path頭指向本地網絡上的類或JAR文件,而不是JAR文件中的JAR文件或通過Internet協議訪問的類。要將JAR文件中的JAR文件中的類加載到類路徑中,您必須編寫自定義代碼來加載這些類。例如,如果MyJar.jar包含另一個名爲MyUtils.jar的JAR文件,則不能在MyJar.jar的清單中使用Class-Path標頭將MyUtils.jar中的類加載到類路徑中。 示例

我們想要將MyUtils.jar中的類加載到MyJar.jar中使用的類路徑中。這兩個JAR文件位於同一個目錄中。

我們首先創建一個名爲Manifest.txt一個文本文件,其內容如下:

Class-Path: MyUtils.jar 

警告:文本文件必須以新行或回車符結束。如果最後一行不以新行或回車結束,則不會正確解析。

然後,我們創建一個名爲MyJar.jar通過輸入以下命令JAR文件:

罐子立方英尺MyJar.jar Manifest.txt MyPackage的/ *類

這將創建一個清單與JAR文件以下內容:現在在MyUtils.jar

Manifest-Version: 1.0 
Class-Path: MyUtils.jar 
Created-By: 1.7.0_06 (Oracle Corporation) 

的類加載到類路徑當您運行MyJar.jar。


+0

爲什麼還打算嘗試結合罐子?這將爲您實現什麼?爲什麼不相反,只要確保可以使用兩個單獨的jar文件? –

+0

我試圖合併它,因爲我不關心帶庫的文件夾,它們必須與主jar文件位於同一個文件夾中。謝謝 –

回答

0

我不知道你想什麼合併,但假設有一個主類和幾個簡單的庫你的一些代碼,你可以其他所有jar文件解壓到同一目錄下,添加您的類,添加Manifest.mf與Main-Class:標題指向您的主類,然後jar(zip)一切回來。這樣,您就可以覆蓋所有包含的jar文件的清單以及可能在多個jar中具有相同名稱的其他文件的清單,但您可以嘗試一下。

你得到的是一個jar文件,你可以用

java -jar myfile.jar 

運行,並在Main-Class的頭文件中定義的類將被用來作爲切入點,它必須實現

方法。

雖然我不推薦這樣的解決方案,但還有其他方法可以幫助您完成此任務。我知道,即使這個解決方案可以被自動化,但你應該看看maven(例如spring-boot:repackage)或其他構建工具。

+0

我不知道應該在Manifest文件中的「classpath」中寫什麼以及放置圖片的位置。但不知何故,我認爲有人可以知道正確的語法,如Oracle文檔中所述。不過,我會閱讀有關Maven插件或其他構建工具。謝謝 –