运行 通过命令行的 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

经过这次测试,你应该会有更多的线索来找到问题的原因。