这是从命令行运行 Java 程序时出现的“初学者常见错误”的变体。
java test 或 java -classpath 目录 test 或 java -cp 。测试它抛出“线程主java.lang.NoClassDefFoundError中的异常:测试(错误名称:deem/test)。
JVM 实际上是在告诉您在搜索路径上找到了“test.class”,但是当它读取类文件时,它得出的结论是该文件应该位于“./deem/test.class”或“directory/deem/” test.class" ...取决于您实际使用的“-cp”/“-classpath”参数
如果我使用 java deem.test 它说:错误,找不到或加载主类 deem.main
这现在告诉您它找不到“deem/main.class”。
请注意,您现在已经告诉它查找名为“deem.main”的类,而不是“test”或“deem.test”。(或者也许你只是在那里抄错了一些东西。)
规则非常简单:
- 您必须将完全限定的类名
java
作为选项后的第一个参数。(不是简单的类名。 不是“.class”文件名。不是入口点方法的名称。)
- 您必须指定类路径,以便
java
命令可以
- 将类名映射到类文件的相对路径名(例如
foo.bar.baz.MyClass
映射到foo/bar/baz/MyClass.class
)...
- 然后根据类路径条目之一解析该相对路径;例如,如果
.
是类路径,则./foo/bar/baz/MyClass.class
.
- 该类必须具有所需的
public static void main(String[])
入口点方法。
所以如果...
- 您的班级的完全限定班级名称是
deem.test
;即test
类在包deem
中,并且
- 对应的类文件在
./deem/test.class
, AND
- 它具有所需的入口点方法,并且
- 测试应用程序不依赖于您的其他类或 3rd 方库...
然后 java -cp . deem.test
应该工作。