为什么我必须在包的文件夹之外才能正确执行 class 文件?
Why do I have to be outside the package's folder to properly execute the class file?
(注意:我知道我在这里没有使用标准命名约定。名称只是为了简单起见。)
我有一个名为 'PackageTest.java' 的文件。它的唯一目的是向控制台打印一行 "This works!"。它属于一个名为 main 的包。在我的控制台中,我执行命令:
javac -d . PackageTest.java
这将创建一个名为 main 的新目录(文件夹),其中包含名为 'PackageTest.main' 的 class 文件。我将 CD 放入它的父目录,然后执行以下命令:
java main.PackageTest
然后控制台显示:
This works!
所以文件被执行了。那挺好的。现在我CD进入'main'文件夹。我执行命令:
java main.PackageTest
才得到结果:
Error: Could not find or load main class main.PackageTest
Caused by: java.lang.ClassNotFoundException: main.PackageTest
所以我尝试这个命令:
java PackageTest
现在我得到这个错误:
Error: Could not find or load main class PackageTest
Caused by: java.lang.NoClassDefFoundError: main/PackageTest (wrong name:
PackageTest)
为什么我必须在目录之外才能执行文件?
包(和文件夹)在语义上是有意义的。您 可以 指定类路径,如果您使用绝对路径,您可以在树中的任何位置移动并且仍然 运行 代码。也可以使用相对路径。喜欢,
java -cp .. main.PackageTest
(注意:我知道我在这里没有使用标准命名约定。名称只是为了简单起见。)
我有一个名为 'PackageTest.java' 的文件。它的唯一目的是向控制台打印一行 "This works!"。它属于一个名为 main 的包。在我的控制台中,我执行命令:
javac -d . PackageTest.java
这将创建一个名为 main 的新目录(文件夹),其中包含名为 'PackageTest.main' 的 class 文件。我将 CD 放入它的父目录,然后执行以下命令:
java main.PackageTest
然后控制台显示:
This works!
所以文件被执行了。那挺好的。现在我CD进入'main'文件夹。我执行命令:
java main.PackageTest
才得到结果:
Error: Could not find or load main class main.PackageTest
Caused by: java.lang.ClassNotFoundException: main.PackageTest
所以我尝试这个命令:
java PackageTest
现在我得到这个错误:
Error: Could not find or load main class PackageTest
Caused by: java.lang.NoClassDefFoundError: main/PackageTest (wrong name:
PackageTest)
为什么我必须在目录之外才能执行文件?
包(和文件夹)在语义上是有意义的。您 可以 指定类路径,如果您使用绝对路径,您可以在树中的任何位置移动并且仍然 运行 代码。也可以使用相对路径。喜欢,
java -cp .. main.PackageTest