自从我上次完成Java以来已经太久了,我不记得为什么会发生以下情况:
鉴于此文件由标准Maven项目创建,如下所示:Maven Tutorial
package com.mycompany.app;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
Run Code Online (Sandbox Code Playgroud)
编译它,即使使用Maven但使用标准的javac可执行文件,也会生成一个没有错误的类文件.尝试运行类文件,您会收到此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: App (wrong name: com/mycompany/app/App)
Run Code Online (Sandbox Code Playgroud)
删除包命令,再次编译,它运行正常.为什么是这样?我正在运行JDK 1.6.0_21顺便说一句.
小智 8
在为类创建包之后,您必须做的一件事是创建嵌套子目录来表示类的包层次结构.在您的情况下,包名称是"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!
$
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读有关Java包的Wikipedia页面.您还可以查看以下链接:
祝好运!
| 归档时间: |
|
| 查看次数: |
1801 次 |
| 最近记录: |