距离上次做Java太久了,想不起来为什么会出现下面的情况:
给定这个由标准 Maven 项目创建的文件,如下所示:Maven Tutorial
package com.mycompany.app;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
编译它,即使不是使用 Maven,而是使用标准的 javac 可执行文件,将生成一个没有错误的类文件。尝试运行类文件,你会得到这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: App (wrong name: com/mycompany/app/App)
去掉package命令,重新编译,运行正常。为什么是这样?我正在运行 JDK 1.6.0_21 btw。
最佳答案
创建 package 后必须做的一件事对于类是创建嵌套的子目录来表示类的包层次结构。在您的情况下,包名称是“com.mycompany.app”,因此 App.class
(已编译的 App.java 文件)应位于“com/mycompany/app”子目录中。源文件所在的位置并不重要。例如,我复制了您的文件并执行了以下操作:
$ ls
App.java
$ javac App.java
$ ls
App.class App.java
$ mkdir -p com/mycompany/app
$ mv App.class com/mycompany/app/
$ java com.mycompany.app.App
Hello World!
$
请阅读Wikipedia page about Java Packages了解更多信息。您还可以查看这些链接:
祝你好运!
关于java - .java 文件中的包使类文件不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868506/