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

标签 java

距离上次做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/

相关文章:

java - 读取模型的文件路径部分

java - 为什么我们更喜欢 byte[] 而不是 int[] 或 long[]?

java - 将批处理文件打包到 jar 文件中

java - 无效的 ADTS sampling_frequency_index 和 channel_configuration 为什么?

java - 来自/usr/share/java 的 JAR 依赖解析

java - 黑莓:(Java)发布/获取数据

java - 如何最好地为 Java Web 应用程序创建每年重置的交易编号

java - 使用 Java 将多个 pdf 压缩为单个 zip 文件

java - 映射到 POJO 的 ObjectMapper 返回 Null

java - 如何使用三重 DES 加密照片/文件? (将上传至投递箱)