运行 通过命令行的 jar:一个桌面上的 classnotfound 异常
Running jar via command line : classnotfound exception on ONE desktop
我有一个 java 脚本,该脚本已被多个用户 运行 使用并且运行良好。
今天,我让另一个用户在他的桌面上尝试脚本,他得到了一个 ClassNotFoundException... 尽管脚本与我的完全相同(并且 jar 位置也相同)
这是启动 JAR 的命令:
java -cp .;customname.jar;libs/* my.package.MyMainClass
而且我还尝试将每个 jar 分别添加到 libs 文件夹中:
java -cp .;customname.jar;libs/lib.jar;libs/lib2.jar;libs/lib3.jar my.package.MyMainClass
这是用户收到的错误消息:
Error: Could not find or load main class ch.vaudoise.hp.services.listener.AutoSysReorder
我检查了 JAVA 配置并尝试在 "Path" 环境变量上为他设置相同的 java 版本。同样的错误。
因为有 6 个用户可以 运行 脚本,只有一个用户出现错误,我确定这是配置问题。但是什么?类路径似乎没问题...
非常感谢您的帮助..
看看ClassNotFoundException despite class in the classpath
您还在 class路径中包含元字符 (*)。
按照 link 中的建议尝试不使用它。
有时复制粘贴到命令行,可能会得到一些不同的复制字符。
我现在无法添加评论:所以,编辑这个答案。
| Java 路径不是问题。
逐步尝试以下操作:
- 查找未找到的 class 在哪个 jar 中。
- 只包含那个 jar 作为 cp。
- 只包含 class 和 try
java -jar that.jar
也试试这个
java -cp "*;"
如果您仍然遇到问题,可能是 jar 不包含 class(您可以打开 jar 并检查)。
你说的是脚本——这个命令是失败的还是脚本的一部分?使用 java -jar -cp ,通常会忽略 cp.
首先要做的事情是:您必须首先找到 冲突 class 的位置。如果您不知道,您可以通过两种替代方式找到它:
以编程方式:编码这个 class 并使用相同的 class 路径执行它(在没有遇到问题的环境中):
public static void main(String[] args)
{
System.out.println(ch.vaudoise.hp.services.listener.AutoSysReorder.class. getResource("/ch/vaudoise/hp/services/listener/AutoSysReorder.class"));
}
手动,一一:打开命令shell并执行:
javap -cp。 ch.vaudoise.hp.services.listener.AutoSysReorder
javap -cp customname.jar ch.vaudoise.hp.services.listener.AutoSysReorder
javap -cp libs/lib.jar ch.vaudoise.hp.services.listener.AutoSysReorder
javap -cp libs/lib2.jar ch.vaudoise.hp.services.listener.AutoSysReorder
...
逐一尝试 class 路径中的每个条目,直到找到 class。
找到 class 的位置后,在冲突的 PC 中打开 shell 并确保该路径可访问:
dir lib\conflicting-library-or-directory
另外,重复 javap 测试:
javap -cp conflicting-library-or-directory ch.vaudoise.hp.services.listener.AutoSysReorder
经过这次测试,你应该会有更多的线索来找到问题的原因。
我有一个 java 脚本,该脚本已被多个用户 运行 使用并且运行良好。
今天,我让另一个用户在他的桌面上尝试脚本,他得到了一个 ClassNotFoundException... 尽管脚本与我的完全相同(并且 jar 位置也相同)
这是启动 JAR 的命令:
java -cp .;customname.jar;libs/* my.package.MyMainClass
而且我还尝试将每个 jar 分别添加到 libs 文件夹中:
java -cp .;customname.jar;libs/lib.jar;libs/lib2.jar;libs/lib3.jar my.package.MyMainClass
这是用户收到的错误消息:
Error: Could not find or load main class ch.vaudoise.hp.services.listener.AutoSysReorder
我检查了 JAVA 配置并尝试在 "Path" 环境变量上为他设置相同的 java 版本。同样的错误。
因为有 6 个用户可以 运行 脚本,只有一个用户出现错误,我确定这是配置问题。但是什么?类路径似乎没问题...
非常感谢您的帮助..
看看ClassNotFoundException despite class in the classpath
您还在 class路径中包含元字符 (*)。 按照 link 中的建议尝试不使用它。
有时复制粘贴到命令行,可能会得到一些不同的复制字符。
我现在无法添加评论:所以,编辑这个答案。 | Java 路径不是问题。 逐步尝试以下操作: - 查找未找到的 class 在哪个 jar 中。 - 只包含那个 jar 作为 cp。 - 只包含 class 和 try
java -jar that.jar
也试试这个
java -cp "*;"
如果您仍然遇到问题,可能是 jar 不包含 class(您可以打开 jar 并检查)。
你说的是脚本——这个命令是失败的还是脚本的一部分?使用 java -jar -cp ,通常会忽略 cp.
首先要做的事情是:您必须首先找到 冲突 class 的位置。如果您不知道,您可以通过两种替代方式找到它:
以编程方式:编码这个 class 并使用相同的 class 路径执行它(在没有遇到问题的环境中):
public static void main(String[] args) { System.out.println(ch.vaudoise.hp.services.listener.AutoSysReorder.class. getResource("/ch/vaudoise/hp/services/listener/AutoSysReorder.class")); }
手动,一一:打开命令shell并执行:
javap -cp。 ch.vaudoise.hp.services.listener.AutoSysReorder
javap -cp customname.jar ch.vaudoise.hp.services.listener.AutoSysReorder
javap -cp libs/lib.jar ch.vaudoise.hp.services.listener.AutoSysReorder
javap -cp libs/lib2.jar ch.vaudoise.hp.services.listener.AutoSysReorder
...
逐一尝试 class 路径中的每个条目,直到找到 class。
找到 class 的位置后,在冲突的 PC 中打开 shell 并确保该路径可访问:
dir lib\conflicting-library-or-directory
另外,重复 javap 测试:
javap -cp conflicting-library-or-directory ch.vaudoise.hp.services.listener.AutoSysReorder
经过这次测试,你应该会有更多的线索来找到问题的原因。