小编典典

.java文件中的软件包使类文件不可用

java

自从我上一次完成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。


阅读 266

收藏
2020-11-26

共1个答案

小编典典

为该类创建之后,您必须做的一件事就是创建嵌套的子目录,以表示该类的包层次结构。在您的情况下,程序包名称为“
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!
$

请阅读有关Java软件包的Wikipedia页面以获取更多信息。您还可以查看以下链接:

祝好运!

2020-11-26