能正常构建的前提是javac和java命令同时可用且版本一致;需验证java -version、javac -version、mvn -v三者版本与路径统一,并确保JAVA_HOME正确指向OpenJDK,再通过javac/java手动编译运行Hello.java闭环验证。

换电脑后,OpenJDK项目能否正常构建,不看IDE有没有识别SDK,只看命令行能不能走通 mvn compile 或 gradle build —— 这才是真实可用的底线。
javac 和 java 命令必须同时可用且版本一致
这是所有构建的前提。很多换机后的问题,表面是Maven报错,根子在JDK没装对。
-
java -version和javac -version必须输出相同版本号(如openjdk version "17.0.2"),且不能一个有、一个报command not found - 若
javac找不到,大概率只装了 JRE,或JAVA_HOME指向了jre/目录,或PATH没包含$JAVA_HOME/bin - Windows 用户改完环境变量后,一定要新开终端;macOS/Linux 用
source ~/.zshrc刷新,别信旧窗口
mvn 或 gradle 必须明确使用你指定的 JDK
Maven/Gradle 不一定读你终端里 java -version 的那个 JDK,它优先信任 JAVA_HOME —— 而这个变量可能被系统默认值覆盖。
- 运行
mvn -v或gradle --version,检查输出里Java version:和JAVA_HOME:是否匹配你预期的 OpenJDK 路径(比如/opt/homebrew/opt/openjdk或C:\Program Files\Java\jdk-17.0.2) - 如果显示的是 Java 11 或 Java 8,说明构建工具用了系统自带的 JDK(如 macOS 的
/usr/bin/java),不是你装的 OpenJDK - 临时修复:启动构建前手动设
export JAVA_HOME=/path/to/your/openjdk(Linux/macOS)或set JAVA_HOME=C:\path\to\jdk(Windows) - 长期方案:在
~/.m2/settings.xml(Maven)或gradle.properties(Gradle)里显式声明org.gradle.java.home,避免依赖环境变量
跑一次最小闭环:从源码到可执行类
绕过 IDE 和构建工具,用最原始方式验证 JDK 编译+运行能力 —— 这步能排除 90% 的“环境看似正常实则断裂”问题。
- 新建空目录,写一个
Hello.java:public class Hello { public static void main(String[] args) { System.out.println("OK"); } } - 执行
javac Hello.java→ 成功生成Hello.class,无任何错误 - 执行
java Hello→ 输出OK;若报Could not find or load main class Hello,检查当前目录是否真有Hello.class,且没手误写成java Hello.class - 特别注意 Windows 控制台乱码:加
javac -encoding UTF-8 Hello.java,否则中文字符串可能编译失败
构建失败时先盯住 UnsupportedClassVersionError
这是换电脑后最典型的“版本错配”信号,往往意味着你在新机器上用高版本 JDK 编译,却让低版本 JVM 去运行(比如用 JDK 21 编译,但 Maven 默认调用的是系统 JDK 11)。
- 错误信息形如:
java.lang.UnsupportedClassVersionError: HelloWorld has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0 - 数字对应关系:
61.0 = Java 17,65.0 = Java 21—— 对照报错里的数字,就能反推编译和运行分别用了哪个 JDK - 解决办法不是降级 JDK,而是统一:要么在
pom.xml里设<maven.compiler.source>17</maven.compiler.source>和<maven.compiler.target>17</maven.compiler.target>,要么确保JAVA_HOME指向唯一 JDK 并全局生效
最容易被忽略的点是:新电脑上可能预装了系统级 JDK(如 macOS 的 /usr/bin/java),它会悄悄接管 java 命令,但 mvn 又读 JAVA_HOME——两个路径不一致,导致编译和运行用的其实是不同 JDK。验证时务必三处比对:java -version、javac -version、mvn -v 输出的 Java 版本和路径。











