我有一个java脚本,由多个用户运行并且运行良好。
今天,我要求另一个用户在他的桌面上尝试脚本,并且他得到了一个ClassNotFoundException ...尽管脚本与我的完全相同(并且jar位置也相同)
这是命令tu启动JAR:
java -cp .;customname.jar;libs/* my.package.MyMainClass
我还试图分别在libs文件夹中添加每个jar:
java -cp .;customname.jar;libs/lib.jar;libs/lib2.jar;libs/lib3.jar my.package.MyMainClass
这是用户收到的错误消息:
错误:无法找到或加载主类ch.vaudoise.hp.services.listener.AutoSysReorder
我检查了JAVA配置并尝试在“Path”环境变量上为他设置相同的java版本。同样的错误。
由于有6个用户可以运行脚本而且只有一个人遇到错误我确定这是一个配置问题。但是什么? Classpath似乎没问题......
非常感谢您的帮助......
答案 0 :(得分:1)
首先要做的事情:你必须首先找到 冲突类的地方。如果你不了解它,你可以通过两种不同的方式找到它:
以编程方式:对此类进行编码并使用相同的类路径执行它(在没有遇到问题的环境中):
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
...
逐个尝试在类路径中的每个条目,直到找到该类。
找到该类的位置后,在冲突的PC中打开一个shell并确保该路径可以访问:
dir lib\conflicting-library-or-directory
另外,重复javap测试:
javap -cp conflicting-library-or-directory ch.vaudoise.hp.services.listener.AutoSysReorder
在此测试之后,您应该有更多线索来找出问题的原因。
答案 1 :(得分:-1)
查看ClassNotFoundException despite class in the classpath
您还在类路径中包含元字符(*)。 按照链接中的建议尝试不使用它。
有时候将粘贴复制到命令行,可能会以不同的方式复制一些字符。
我现在无法添加评论:所以,编辑这个答案。 | Java路径不是问题。 请尝试以下步骤: - 找到未找到的类所在的jar。 - 仅包含该罐作为cp。 - 仅包括该课程并尝试
java -jar that.jar
也尝试一次
java -cp "*;"
如果你仍然有问题,可能是jar不包含类(你可以打开jar并检查)。
你说脚本 - 这个单一的命令是失败的还是脚本的一部分?使用java -jar -cp,通常会忽略cp。