(注意:我知道我在这里没有使用标准的命名约定。这些名称只是为了简单起见。)
我有一个名为“ PackageTest.java”的文件。唯一的目的是在控制台上打印一行,说“这可行!”。它属于一个名为main的软件包。在我的控制台中,执行以下命令:
javac -d . PackageTest.java
这将创建一个名为main的新目录(文件夹),其中包含名为“ PackageTest.main”的类文件。我进入其父目录,并执行以下命令:
java main.PackageTest
然后控制台显示:
This works!
因此文件已执行。那很好。现在,我将CD放入“主”文件夹中。我执行命令:
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)
为什么必须在目录外部才能执行文件?
答案 0 :(得分:4)
包(和文件夹)在语义上有意义。您可以指定类路径,如果使用绝对路径,则可以在树中的任何位置移动并仍然运行代码。也可以使用相对路径。喜欢,
java -cp .. main.PackageTest