在 CentOS 上编译 Java 后运行提示“找不到主类(Could not find or load main class)”,通常不是编译失败,而是运行方式或类路径问题。下面按最常见原因逐一排查。
javac Hello.java
java Hello.class
❌ java 后面 不能加 .class
javac Hello.java
java Hello
package com.test;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello");
}
}
javac Hello.java
java Hello
mkdir -p com/test
mv Hello.java com/test/
javac com/test/Hello.java
java com.test.Hello
⚠️ 必须
java Hello
如果当前目录不在 classpath 中,会找不到类。
java -cp . Hello
或
java -classpath . Hello
Linux / CentOS 区分大小写
public class Hello {}
必须是:
java Hello
❌ 错误:
java hello
检查是否真的生成了 class 文件:
ls *.class
如果没有:
例如:
javac -d /tmp Hello.java
运行时要对应:
java -cp /tmp Hello
如果是运行 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
java -version
javac -version
不一致会导致奇怪问题:
sudo alternatives --config java
建议检查:
echo $JAVA_HOME
echo $PATH
请逐一确认:
java Hello 没有 .classmain(String[] args) 方法-cp 指向 class 所在目录public class Hello {
public static void main(String[] args) {
System.out.println("OK");
}
}
javac Hello.java
java Hello
如果你愿意,可以把:
全部贴出来,我可以直接帮你定位到是哪一项导致的。