使用包时获取 java.lang.ClassNotFoundException

Doc*_*ard 1 java java-package javacompiler java-11

我有一个ComPac.java带有以下代码的java文件:

package com;
public class ComPac{
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
Run Code Online (Sandbox Code Playgroud)

该文件位于路径: /home/ec2-user/java_c

为了编译这个文件,我运行了javac Compac.java,然后生成了类文件。

在此处输入图片说明

现在轮到运行类文件了。

所以我做了java ComPac(下面的截图)

压缩包

可以理解的是,我得到了错误Error: Could not find or load main class ComPac. Caused by: java.lang.NoClassDefFoundError: com/ComPac (wrong name: ComPac). 我假设这是因为 java 文件中com声明了包。

所以我尝试了,java com.ComPac并希望它能工作(下面的截图)。

java com.comPac

但我得到了错误:Error: Could not find or load main class com.ComPac. Caused by: java.lang.ClassNotFoundException: com.ComPac.

那么我该如何运行呢?当涉及到 java 中的包时,运行的逻辑究竟是什么?

使用的Java- openjdk version "11.0.8" 2020-07-14 LTS(AWS Corretto)

使用的操作系统- Amazon Linux 2

小智 5

将类放在名为“com”的文件夹中

在 bash shell 中,它是:

$ java com/ComPac
Run Code Online (Sandbox Code Playgroud)

(来自包含“com”的文件夹,而不是“com”内部)

  • @Zeus 对于标准类加载,文件夹结构应与包匹配。请注意,当您使用“-d”选项指定目标目录时,“javac”会自动创建此结构。该目标目录将是您在启动 Java 应用程序时应使用“-cp”选项指定为类路径(或其一部分)的目录。 (2认同)