2011-11-27 51 views
0

我做了一個可執行的JAR,使用格式爲什麼可執行jar無法確認它裏面的jar文件?

jar cvfm MyJarName.jar manifest.txt *.class dependentJar1.jar dependentJar2.jar 

在此罐恰當地提出,一切看上去都不錯。但是在運行時,它得到運行時錯誤取決於與命令提示符其他罐子,因爲它可以」找到我的項目引用的類文件。探索創建的jar,它依賴的其他2個jar就在那裏,就像它們應該是的一樣,並且它們被列在manifest.mf類路徑中,但由於某些原因,java是愚蠢的,並且實際上並不在這些jar中查看。

當這兩個罐子在與所有者jar相同的目錄中時,java能夠找到它們並且它工作正常。但我不想要這個;我希望這些罐子實際上是它的內部。這是怎麼回事?我如何使其內部的其他罐子工作的可執行jar?

回答

3

您可以使用類似OneJarjarjar(或任何其他幾個人的)收拾一個罐子內的一切。

如果您使用Maven構建,則可以使用Maven Shade Plugin

可能使用自定義類加載器,如JarClassLoader,這將允許您準確地想要什麼。

+0

...你介意如何使用onejar嗎?就像我想要做的那樣,我究竟該怎麼做呢?我下載它,它看起來非常複雜 – Pojo

+0

@Pojo取決於你如何建設; *最簡單*可能會遵循[Ant示例](http://one-jar.sourceforge.net/index.php?page=build-tools&file=ant-example)。 –

+0

我不是。此外,我只是發現了一些方向......我按照此頁所述的命令行方法進行操作:http://one-jar.sourceforge.net/index.php?page=getting-started&file=quickstart 究竟是什麼這是否意味着在步驟3中「unjar」? – Pojo

0

我不認爲你可以。也許這在某種程度上可以通過定製的類加載器來實現,但不能從盒子中獲得。使用maven shade插件。

0

如果您在Eclipse中使用Ant Builder並將引用的jar放入可供項目訪問的庫中,那麼Eclipse將提取必要的類並將它們包含在可分發的jar文件中。