之前已经问过这个问题,但由于某些原因,我仍然无法弄清楚什么是错的。 我在文件src中的包语法测试中得到了一个名为NewClass的类。从src路径我输入:
javac src / syntaxtest / NewClass.java
并且编译了类,我可以在syntaxtest文件夹中看到NewClass.class。现在从同一个路径或甚至与NewClass.class相同的文件夹,我无法弄清楚如何从终端运行该类。我做了很多不同的尝试,但我得到了
ClassDefNotFound或ClassDefNotFound(错误名称:syntaxtest / NewClass)
答案 0 :(得分:8)
尝试“java -cp src syntaxtest.NewClass
”。
也就是说,如果你有一个文件夹“src”,它包含子文件夹(包)“syntaxtest”,而类“NewClass”在“package syntaxtest”中,那么上面的命令就可以了。
$ ls src/syntaxtest
NewClass.java
$ cat src/syntaxtest/NewClass.java
package syntaxtest;
public class NewClass {
public static void main(String args[]) {
System.out.println("Hello, World!");
}
}
$ javac src/syntaxtest/NewClass.java
$ java -cp src syntaxtest.NewClass
Hello, World!
答案 1 :(得分:1)
我做了以下测试:
在home / test / blah / TestClass.java
中创建了一个java文件 包裹等等;public class TestClass { public static void main(String [] args){ System.out.println(“Hello World!”); } }
转到目录home / test /
javac blah/TestClass.java
java blah.TestClass
java test / blah.TestClass
java.lang.NoClassDefFoundError
所以在我看来,使用'java'命令运行Java类,你真的必须在应用程序的根文件夹中。
答案 2 :(得分:0)
我有类似的问题。 我想直接从Mac finder使用src和bin文件夹组织我的项目,并使用Emacs或其他文本编辑器。我只是不喜欢日食。
您无法从其他文件夹执行这些类,但您可以从另一个文件夹编译到您要执行的文件夹中。
例如(假设没有包),移动到bin文件夹并运行:
$ javac ../src/name.java -d ../ bin /
(从src文件夹编译并直接在bin上输出.class文件)