Java 运行可执行jar抛出ClassNotFoundException
我的jar文件中的目录如下所示: 在Java 运行可执行jar抛出ClassNotFoundException,java,Java,我的jar文件中的目录如下所示: 在remote.jar中 -com -lib -META-INF META-INF下面是文件MANIFEST.MF: Manifest-Version: 1.0 Class-Path: lib/* Main-Class: com.xx.xx.Main 所有JAR都在lib文件夹下 当我运行java-jar remote.jar时,在命令行中,它给出了ClassNotFoundException,未找到的类位于lib文件夹下的一个jar中。如果main函
remote.jar中
-com
-lib
-META-INF
META-INF
下面是文件MANIFEST.MF
:
Manifest-Version: 1.0
Class-Path: lib/*
Main-Class: com.xx.xx.Main
所有JAR都在lib
文件夹下
当我运行java-jar remote.jar
时,在命令行中,它给出了ClassNotFoundException
,未找到的类位于lib
文件夹下的一个jar中。如果main
函数未引用lib中的任何类,则命令行运行时不会出现问题
我的问题是为什么在lib下找不到jar中的类
编辑:
文件夹
lib
下没有嵌套文件夹问题在于清单中的类路径属性无法按您认为的方式工作。看
注意:类路径头指向
本地网络,而不是JAR文件内的JAR文件或可访问的类
通过互联网协议。在JAR中加载JAR文件中的类
如果要将文件加载到类路径中,则必须编写自定义代码来加载这些文件
上课。例如,如果MyJar.jar包含另一个名为
在MyJar.jar中,不能使用类路径头
清单将MyUtils.jar中的类加载到类路径中
最简单的解决方案是将类路径jar放在jar之外,并创建一个小批处理文件或shell脚本来构造类路径并调用jar。我担心设置
清单类路径
不会让您成功地从嵌套的jar加载类(如Ian回答中的链接所述,在您的罐子中)。
如果要打包单个可执行jar,最好的选择是:
附带说明:您的标题不正确尝试将类路径更改为/lib/
@Choc13我尝试过不起作用。我已在Eclipse中使用export成功创建了引用第三方jar的可执行jar。Eclipse随后为我处理了MANIFEST.MF的创建,并添加了从中加载jar所需的内容在jar中。@EJP您不正确。请查看Ian答案中的链接。不是jar文件中的jar文件或可通过internet协议访问的类。
@EJP-是否删除您的否决票?请在做出决定之前仔细阅读我的答案。感谢您根本没有投票:我建议更改“本地”一词这是误导和不准确的。“嵌套”是非常重要的better@b.buchhold谢谢。更正。非常感谢您不断帮助我找到问题的根源,我学到了很多,这是一次宝贵的经验。我的罐子里没有嵌套的罐子。