温馨提示×

Centos编译Java找不到主类为何

小樊
47
2026-08-30 20:29:22
栏目: 编程语言

CentOS 上编译 Java 后运行提示“找不到主类(Could not find or load main class)”,通常不是编译失败,而是运行方式或类路径问题。下面按最常见原因逐一排查。


一、最常见原因:运行方式不对

❌ 错误示例

javac Hello.java
java Hello.class

java 后面 不能加 .class

✅ 正确方式

javac Hello.java
java Hello

二、包名(package)导致的问题(非常高概率)

示例代码

package com.test;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

❌ 错误运行方式

javac Hello.java
java Hello

✅ 正确做法

1️⃣ 按包结构建立目录

mkdir -p com/test
mv Hello.java com/test/

2️⃣ 编译

javac com/test/Hello.java

3️⃣ 运行

java com.test.Hello

⚠️ 必须

  • 包名 = 目录层级
  • 从源码根目录运行
  • 使用全限定类名

三、classpath 设置错误

情况 1:不在当前目录

java Hello

如果当前目录不在 classpath 中,会找不到类。

✅ 明确指定 classpath

java -cp . Hello

java -classpath . Hello

四、类名大小写错误(Linux 严格区分)

Linux / CentOS 区分大小写

public class Hello {}

必须是:

java Hello

❌ 错误:

java hello

五、编译成功但没生成 class 文件

检查是否真的生成了 class 文件:

ls *.class

如果没有:

  • 编译失败
  • 或输出目录被指定到了别处

例如:

javac -d /tmp Hello.java

运行时要对应:

java -cp /tmp Hello

六、MANIFEST.MF 主类配置错误(Jar 包方式)

如果是运行 jar:

java -jar xxx.jar

但 jar 内:

  • 没有 Main-Class
  • 或路径写错

检查:

jar tf xxx.jar

或:

unzip -p xxx.jar META-INF/MANIFEST.MF

正确示例:

Main-Class: com.test.Hello

七、CentOS 环境常见问题

1️⃣ 多个 Java 版本冲突

java -version
javac -version

不一致会导致奇怪问题:

sudo alternatives --config java

2️⃣ 环境变量问题

建议检查:

echo $JAVA_HOME
echo $PATH

八、快速自检清单 ✅

请逐一确认:

  • [ ] java Hello 没有 .class
  • [ ] 有 main(String[] args) 方法
  • [ ] 类名大小写正确
  • [ ] 包名和目录一致
  • [ ] 使用全限定类名运行
  • [ ] -cp 指向 class 所在目录
  • [ ] Java / Javac 版本一致

九、最小可运行示例(推荐直接测试)

Hello.java

public class Hello {
    public static void main(String[] args) {
        System.out.println("OK");
    }
}

编译运行

javac Hello.java
java Hello

如果你愿意,可以把:

  • Java 源码
  • 编译命令
  • 运行命令
  • 报错信息

全部贴出来,我可以直接帮你定位到是哪一项导致的。

0