Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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 在Unix上运行.jar文件总是在NoClassDefFoundError异常中解析_Java_Unix_Exception_Jar_Manifest - Fatal编程技术网

Java 在Unix上运行.jar文件总是在NoClassDefFoundError异常中解析

Java 在Unix上运行.jar文件总是在NoClassDefFoundError异常中解析,java,unix,exception,jar,manifest,Java,Unix,Exception,Jar,Manifest,我正在编写一个小java程序,我想在unix机器上运行它 首先,我编译了.java文件,没有任何错误 javac CallACMDFromJAVA.java 然后创建了我的.class文件 CallACMDFromJAVA.class 然后我使用jar命令创建了一个可执行的.jar文件 jar cfm cmd.jar manifest.txt CallACMDFromJAVA.class 到目前为止还不错。最后一个cmd给了我一个cmd.jar文件。 但是当我想运行它时,突然出现了一些错误

我正在编写一个小java程序,我想在unix机器上运行它

首先,我编译了
.java
文件,没有任何错误

javac CallACMDFromJAVA.java
然后创建了我的
.class
文件

CallACMDFromJAVA.class
然后我使用
jar
命令创建了一个可执行的
.jar
文件

jar cfm cmd.jar manifest.txt CallACMDFromJAVA.class
到目前为止还不错。最后一个cmd给了我一个
cmd.jar
文件。 但是当我想运行它时,突然出现了一些错误。我键入:

java -jar cmd.jar
错误:

Exception in thread "main" java.lang.NoClassDefFoundError: CallACMDFromJAVA (wrong name: serviceCall/CallACMDFromJAVA)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

您需要更多关于java环境的信息或其他帮助吗?

您的类显然在包
serviceCall
中。理想情况下,您应该使源目录结构与包结构匹配,以便将源文件放在名为
serviceCall
的目录中。即使没有它,如果你用

javac -d . CallACMDFromJAVA.java
然后应该创建一个
serviceCall
目录,其中包含
CallACMDFromJAVA.class
。在将其放入jar文件之前,您应该尝试直接运行它:

java serviceCall.CallACMDFromJAVA
。。。这应该是可行的,而
java CallACMDFromJAVA
将使用现有工作流失败,并出现相同的错误。在将其放入jar文件之前,在没有jar文件的情况下尝试它总是值得的

然后,您需要将清单中的
主类
更改为
serviceCall.CallACMDFromJAVA
,并创建jar文件以包含
serviceCall
目录,例如

jar cfm cmd.jar manifest.txt serviceCall
那么它应该会起作用。基本上,您需要
Main Class
属性来引用完全限定的类名,并且需要相应的类文件位于jar文件中的适当目录中


请注意,如果您使用一个好的IDE,所有的目录结构都可能为您处理。

Wow。我从来没有读过这么好的答案!而且它也起作用了!!:D非常感谢!