2013-07-27 129 views
1

這個問題可能是理論上的,但我找不到任何適當的解決方案。創建jar問題

假設我在做它採用3 jar文件(休眠,log4j的,傑克遜)的模塊。

現在我想編譯我的模塊並創建一個jar,這樣我的模塊就可以被任何其他模塊使用,並且該模塊不應該再需要三個jar(hibernate,log4j,jackson)。

即我的模塊JAR文件不應該有任何相關性。

我使用eclipse.I我能夠創建一個JAR(項目 - >導出 - >罐子),但不包括在它的罐子 指導我怎樣才能做到這一點。

這裏有什麼用的apache ant嗎?

+0

*「這裏有任何使用的apache螞蟻嗎?」*理論上是的。我的意思是Ant可以從每個Jar獲得所有的類,並製作一個包含它們的「胖」Jar。 OTOH通常是一個更好的主意,只需確保適當的Jars在運行時類路徑上。這是1)爲了確保保留每個Jar清單中的重要信息。 2)保存原始罐子的數字簽名。 &3)爲了避免法律上的麻煩(大多數API要求你按原樣分發它們) –

+0

這是maven和apache常春藤解決的問題,這是否是一個選項? –

+0

@ThorbjørnRavnAndersen:只要教程爲學習它們很小,易於使用.. :-)如果你可以給我提供一些參考資料,它會很好...考慮馬諾伯... :-) – user2511713

回答

0

您將需要包括你的依賴的所有類到您的jar文件。 由於jar文件只是一個zip文件,因此您可以使用任何歸檔管理器(如Winzip)來探索它們,然後將依賴的jar文件的內容複製到您自己的jar中,注意保持目錄結構不變。

這樣你就可以將所有東西放在一個罐子裏。

+0

使用Zip工具創建Jars是非常有問題的。 Zip工具不僅支持Java不支持的壓縮級別,而且您還有我的評論中概述的其他問題。 –

1

Eclipse的運行的JAR嚮導

Eclipse的運行的JAR嚮導(文件→導出...→Java的→運行的JAR文件)允許開發人員從現有的運行配置創建可執行的jar文件:

enter image description here

該向導包含3個用於處理相關性的選項:

  1. 將所需的庫提取到生成的jar中: unarchives庫 依賴關係並將它們重新打包到您的可執行jar文件中。這個 選項具有簡單性的優點,並且不需要定製的類加載器 。但是重新打包庫罐可能會導致其他問題,並且不會保留簽名罐子的簽名。這 選項也可能違反了您使用的庫的許可條款。

  2. 包所需的庫到生成的JAR:創建一個「胖罐子」 使用自定義類加載器。得到的罐子包含 應用程序的類和資源,以啓動應用程序 一個小的自定義類裝載器,它知道如何找到罐子庫在另外一個JAR檔案

  3. 需要複製庫需要 庫罐子...:創建應用程序歸檔並將 任何所需的庫依賴項複製到目標文件夾。

我認爲第二個選擇適合您的目的。

+0

你可以解釋一下啓動配置是什麼。我的jar文件doenot有一個主要的功能。它只有助手功能和類 – user2511713

+0

@ user2511713:如果你沒有一個主要類作爲啓動程序使用,你可以考慮使用一些脂肪jar創建插件,如JarSplice-http://ninjacave.com/jarsplice –