自从我上一次完成Java以来已经太久了,我不记得为什么会发生以下情况:
给定由标准Maven项目创建的文件,如下所示:Maven教程
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。
为该类创建包之后,您必须做的一件事就是创建嵌套的子目录,以表示该类的包层次结构。在您的情况下,程序包名称为“ com.mycompany.app”,因此App.class(已编译的App.java文件)应位于“ com / mycompany / app”子目录中。不过,源文件位于何处都没有关系。例如,我已复制您的文件并执行以下操作:
App.class
$ 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! $
请阅读有关Java软件包的Wikipedia页面以获取更多信息。您还可以查看以下链接:
祝好运!