为什么一个可执行jar不承认它里面的jar?

时间:2011-11-27 21:14:38

标签: java jar executable

我使用格式

创建了一个依赖于其他jar的可执行jar的命令提示符
jar cvfm MyJarName.jar manifest.txt *.class dependentJar1.jar dependentJar2.jar

jar是正确的,一切看起来都很好......但是在运行时,它会收到运行时错误,因为它无法找到我的项目所引用的类文件。探索创建的jar,它依赖的其他2个jar就像它们应该存在一样,它们列在manifest.mf类路径中,但由于某种原因,java是愚蠢的,实际上并没有查看这些jar。

当这两个罐子与所有者jar在同一个目录中时,java能够找到它们并且工作正常。但我不想要这个;我希望那些罐子实际上是在它里面。这是怎么回事?如何在其中使用其他罐子制作可执行jar?

3 个答案:

答案 0 :(得分:3)

你可以使用像OneJarjarjar(或其他几个)中的任何东西来收拾一个罐子里的所有东西。

如果您使用Maven构建,则可以使用Maven Shade Plugin

可以使用像JarClassLoader这样的自定义类加载器,它可以准确地提供你想要的内容。

答案 1 :(得分:0)

我认为你不能。也许它可以通过自定义类加载器以某种方式实现,但不是从盒子里开始的。使用maven shade插件。

答案 2 :(得分:0)

如果您在Eclipse中使用Ant Builder并将引用的jar放在项目可访问的库中,Eclipse将提取必要的类并将它们包含在您的可分发jar文件中。