我剛剛問了一個關於分發可執行JAR及其依賴關係的最新問題,這讓我意識到我對JAR的理解可能存在根本性缺陷。編譯Java和JAR
因此,有些人可能會說:「嘿現在!這這裏是一個重複的問題!」但是我會拒絕,這個問題的this 原來的問題一個完全獨立的分支,並涉及Java的基礎!
如果我有一個依賴於Apache Commons CLI和JODA Time的應用程序,並且將此應用程序打包爲可分發的JAR,我的原始問題是:不包括CLI和JODA JAR我的JAR,程序如何在客戶端運行?
我現在在想,因爲我的代碼使用CLI和JODA編譯到類文件中,並且字節碼是打包的,所以不需要包含CLI或JODA(或任何其他第三方JAR )在我的JAR中,因爲它現在都在運行字節碼。
有人可以確認或糾正我嗎?這個啓示雖然很晚,但卻令人震驚。
一個的* .jar *是你應該在包裝罐中的清單文件中指定的類路徑基本上是一個* .zip *,所以我建議你通過解壓幾個* .jar *然後看看裏面是什麼來自己做實驗。請注意,您可以**將「罐子放在罐子裏」*,但是您需要編寫自己的類加載器(或者使用一個程序來完成這一切)。另一種方法是將你所依賴的* .class *(*即*字節碼)放在你的* .jar *文件中(不推薦,但它可以工作)。 – SyntaxT3rr0r
你的應用程序。有一個GUI? –
@Mara:btw你的* .class *文件不包含整個CLI和JODA庫。 .class文件具有依賴性:您需要在* .jar *或CLI和JODA *中使用來自CLI和JODA的.class文件。jar *某處。運行* .jar *時,這些依賴關係將得到解決(或嘗試解決)。如果你有自己的類加載器,默認的類加載器將檢查幾個地方(在路徑中,在你的*。jar *中,在jar中的jar中)等,並看看它是否能解決你的依賴。 – SyntaxT3rr0r