从jar内部执行类文件时发生java.lang.ClassNotFoundException

从jar内部执行类文件时发生java.lang.ClassNotFoundException,java,linux,class,jar,Java,Linux,Class,Jar,我在windows中创建了一个jar文件并将其复制到linux,并尝试使用以下命令执行: java -jar Test.jar com.dcat2.messaging.datatransfer.Test 我得到一个例外情况如下: Exception in thread "main" java.lang.NoClassDefFoundError: Test Caused by: java.lang.ClassNotFoundException: Test at java.net.URLC

我在windows中创建了一个jar文件并将其复制到linux,并尝试使用以下命令执行:

java -jar Test.jar com.dcat2.messaging.datatransfer.Test
我得到一个例外情况如下:

Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Test. Program will exit.
jar -tf Test.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/dcat2/
com/dcat2/messaging/
com/dcat2/messaging/datatransfer/
com/dcat2/messaging/datatransfer/Test.class
我在拥有jar文件的同一位置执行此命令

以下是我的java代码:

package com.dcat2.messaging.datatransfer;

public class Test {
public static void main(String[] args) {
    System.out.println("Test App : " + args[0]);

}
}
jar-tf命令的输出如下:

Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Test. Program will exit.
jar -tf Test.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/dcat2/
com/dcat2/messaging/
com/dcat2/messaging/datatransfer/
com/dcat2/messaging/datatransfer/Test.class
有人能帮忙吗

java -cp Test.jar com.dcat2.messaging.datatransfer.Test
-jar选项启动在jar文件清单中指示为主类的类(在您的情况下,它必须是默认包中的测试类)


-cp选项设置应用程序要使用的类路径,在本例中,该应用程序只包含您的测试jar。

非常感谢……它起了作用:)还有一个疑问……因此,如果我从其他位置执行此命令,我应该如何设置类路径并执行?
java-cp/path/to/The/test.jar com.dcat2.messaging.datatransfer.test
。路径可以是绝对的,也可以是相对的。顺便说一句,使用Eclipse可以将jar与其依赖项打包,这样您的jar将包含它所需要的所有其他jar。然后你可以不用-cp运行它我试过了。。。但它说“无法找到或加载主类Test.jar”