Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类未找到异常,即使jar位于类路径/调试类路径问题上_Java_Classpath - Fatal编程技术网

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内容),我开始调查,我花了很长时间才发现。因此,我认为这可能会对其他人有所帮助,因为我无法从任何地方找到这个特定的问题。是的,我知道,当你回答自己的问题时,我在评论中添加了这一点,以便其他来寻找你的链接的人可能会发现它很有用:)