Java 类未找到异常,即使jar位于类路径/调试类路径问题上
我被难住了,我试着像这样运行我的简单程序:Java 类未找到异常,即使jar位于类路径/调试类路径问题上,java,classpath,Java,Classpath,我被难住了,我试着像这样运行我的简单程序: java -cp ~/FirmwareUpdate/bin:~/PureJavaHidApi/bin/purejavahidapi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar Test ./test -cp ~/FirmwareUpdate/bin:~/PureJavaHidApi/bin/purejavahidapi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar Test 我得到
java -cp ~/FirmwareUpdate/bin:~/PureJavaHidApi/bin/purejavahidapi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar Test
./test -cp ~/FirmwareUpdate/bin:~/PureJavaHidApi/bin/purejavahidapi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar Test
我得到
Exception in thread "main" java.lang.NoClassDefFoundError: purejavahidapi/InputReportListener
在代码中它第一次访问该类的位置
我在SO和其他地方读过几十个答案,但都没有找到答案。最后一分钱掉了下来 问题是主目录“~”引用除了类路径中的第一个条目之外不起作用,这真的让我偏离了轨道。因为它在第一个条目中起作用,所以我认为它在其他条目中也起作用 问题来自(事后很容易看出)主目录路径扩展是由shell完成的,对于shell来说,整个类路径条目看起来像一个参数,因此扩展只在参数的开头发生一次 我通过编写以下简单的bash脚本确认了这一点:
#!/bin/bash
for i; do
echo $i
done
将其保存为“test”,并按如下方式尝试我的命令行:
java -cp ~/FirmwareUpdate/bin:~/PureJavaHidApi/bin/purejavahidapi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar Test
./test -cp ~/FirmwareUpdate/bin:~/PureJavaHidApi/bin/purejavahidapi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar Test
哪些产出:
-cp
/Users/nyholku/FirmwareUpdate/bin:~/PureJavaHidApi/bin/purejavahidapi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar
Test
确认诊断。不要使用
~
。然而您可能能够使用$HOME
:java-cp$HOME/FirmwareUpdate/bin:$HOME/PureJavaHidApi/bin/PureJavaHidApi.jar:$HOME/PureJavaHidApi/lib/jna-4.0.0.jar Test
谢谢,这是正确的,我喜欢使用$HOME的提示,因为即使在这样的临时调用中指定完整路径也是一件令人厌烦的事。Hi@nyholku,purejavahidapi wokring可以吗?我正在考虑将来在我的项目中使用它。@NeoPham是的,我认为它在大多数情况下对大多数人都有效。你甚至可以将你的类路径导出为变量,然后像这样引用export my_class_path=~/FirmwareUpdate/bin:~/PureJavaHidApi/bin/PureJavaHidApi.jar:~/PureJavaHidApi/lib/jna-4.0.0.jar
java-cp.:$MY_CLASS_PATH Test
正确,谢谢。我知道这一点,也知道大多数其他使这项工作成功的方法。这只是一行代码,我用来从命令行对代码进行特殊测试,当它不起作用时,我无法找出特定命令行的问题所在(因为我认为我知道我的-cp和java内容),我开始调查,我花了很长时间才发现。因此,我认为这可能会对其他人有所帮助,因为我无法从任何地方找到这个特定的问题。是的,我知道,当你回答自己的问题时,我在评论中添加了这一点,以便其他来寻找你的链接的人可能会发现它很有用:)