Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Java小程序查找嵌入在单个jar文件中的jar库_Java_Jar_Applet - Fatal编程技术网

让Java小程序查找嵌入在单个jar文件中的jar库

让Java小程序查找嵌入在单个jar文件中的jar库,java,jar,applet,Java,Jar,Applet,我在获取Java小程序时遇到了一些问题,它使用嵌入式jar库在网页中工作。具体地说,对于包含在jar文件中的库中的类,我得到了一个NoClassDefFoundError,jar文件本身包含在小程序的单个jar文件中。后者的常规类(即嵌套jar文件中不包含的类)由小程序启动器定位,没有任何问题 以下是我的HTML代码: <applet code="Applet.class" archive="myApplet.jar" width="600" height="600" title="MyA

我在获取Java小程序时遇到了一些问题,它使用嵌入式jar库在网页中工作。具体地说,对于包含在jar文件中的库中的类,我得到了一个NoClassDefFoundError,jar文件本身包含在小程序的单个jar文件中。后者的常规类(即嵌套jar文件中不包含的类)由小程序启动器定位,没有任何问题

以下是我的HTML代码:

<applet code="Applet.class" archive="myApplet.jar" width="600" height="600" title="MyApplet">


比如说,在MyApplet.jar中还有两个jar文件:根级别的library1.jar和library2.jar。我如何使它们可访问,以便启动器可以找到它们?我曾尝试将library1.jar和library2.jar添加到存档属性,但没有成功。

Java不支持直接在其他jar文件中添加jar文件

您将需要一个知道如何使用它们的自定义类加载器。该项目提供了这样一个类加载器,并且可以使用ant编写脚本。如果您使用Eclipse,Export->Runnable jar有一个选项,可以直接使用one-jar类加载器创建一个jar


请注意,由于类加载器需要在内存中缓存更多信息,内存使用率将更高。

您可以使用maven shade插件生成一个包含所有内容的jar。

您可以从依赖项jar中取消对文件的锁定,并将其包含在jar中。假设您有一个bin、src和libs目录

cd bin
find ../libs -type f -name \*.jar -exec jar xfv {} \;
rm -rf bin/META-INF
cd ..
jar cfv yourjar.jar -C bin/ .

谢谢你的回答。我尝试使用FatJAR插件,该插件包含一个jar,但生成的jar文件没有加载到网页中。它甚至找不到我的main类(它现在似乎包含在fatjar文件的main子目录中的main.jar文件中)。我必须在HTML小程序代码中编写什么才能让它找到所有必要的文件?您还需要提供one jar launcher类作为主类。记住启用Java控制台。