我在获取Java Applet时遇到了一些问题,它使用嵌入式jar库在网页中工作。具体地说,我为打包在jar文件中的库中包含的类获得了一个NoClassDefFoundError,jar文件本身包含在我的Applet的单个jar文件中。后者的常规类(即那些未包含在嵌套jar文件中的类)由Applet启动器定位,没有任何问题。
下面是我的HTML代码:
<applet code="Applet.class" archive="myApplet.jar" width="600" height="600" title="MyApplet">
假设在MyApplet.jar内部还有另外两个jar文件:根级别的library1.jar和library2.jar。如何使它们可访问,以便启动器可以找到它们?我曾尝试将library2.jar ary1.jar和library2.jar ary2.jar添加到archive属性中,但不起作用。
发布于 2011-02-18 21:09:43
您可以从依赖jar中解压缩这些文件,并将它们包含在您的jar中。假设您有一个bin、src和libs dir。
cd bin
find ../libs -type f -name \*.jar -exec jar xfv {} \;
rm -rf bin/META-INF
cd ..
jar cfv yourjar.jar -C bin/ .发布于 2011-02-17 19:07:29
Java不直接支持其他jar文件中的jar文件。
您将需要一个知道如何使用它们的自定义类加载器。one-jar项目提供了这样一个类加载器,并且可以使用ant编写脚本。如果使用Eclipse,Export -> Runnable jar可以选择使用one-jar类加载器直接创建单个jar。
请注意,由于类加载器需要在内存中缓存更多信息,因此内存使用率将会更高。
发布于 2011-02-17 20:56:16
您可以使用maven shade插件生成一个包含所有内容的jar。
https://stackoverflow.com/questions/5028005
复制相似问题