ElIauk

Java 开发环境搭建:JDK、IDEA 与第一个程序

为什么先折腾环境 很多人学 Java 的第一天就卡在环境上:java -version 能输出,javac 却提示“不是内部或外部命令”;IDEA 能打开项目,编译时报“无效的目标发行版”;同一个机器装了 JDK 8 和 JDK 17,命令行和 IDEA 用的却不是同一个版本。环境问题不解决,后面

评论
Java 开发环境搭建:JDK、IDEA 与第一个程序

为什么先折腾环境

很多人学 Java 的第一天就卡在环境上:java -version 能输出,javac 却提示“不是内部或外部命令”;IDEA 能打开项目,编译时报“无效的目标发行版”;同一个机器装了 JDK 8 和 JDK 17,命令行和 IDEA 用的却不是同一个版本。环境问题不解决,后面 Spring Boot 的坑会一个接一个。

这篇文章按“装 JDK → 配环境变量 → 配 IDEA → 跑第一个程序”的顺序,把 2022 年最常见的 JDK 8/11/17 环境问题一次讲清楚。

版本怎么选

版本 类型 建议
JDK 8 LTS 老项目、公司历史系统仍然常见,语法保守
JDK 11 LTS 过渡版本,部分公司使用
JDK 17 LTS 2021 年发布,Spring Boot 3.x 的最低要求,新项目优先

学习阶段建议至少装 JDK 8 和 JDK 17 两个版本:用 8 跑老教程,用 17 跟新框架。不要只装一个“最新版”,也不要同时把多个 javapath 留在 PATH 最前面。

Windows:安装与 JAVA_HOME

安装时路径尽量不要带中文和空格,例如 C:\dev\jdk-17。安装完成后配置系统环境变量:

JAVA_HOME = C:\dev\jdk-17
Path 追加:
%JAVA_HOME%\bin

注意两点:

  1. JAVA_HOME 指向 JDK 根目录,不是 bin 目录;
  2. 如果安装器自动写入了 C:\Program Files\Common Files\Oracle\Java\javapath,要把它从 PATH 中删除或下移,否则命令行可能优先命中另一个 Java。

Linux 上常见做法是解压到 /usr/local/jdk-17,然后:

sudo tee /etc/profile.d/java.sh >/dev/null <<'EOF'
export JAVA_HOME=/usr/local/jdk-17
export PATH="$JAVA_HOME/bin:$PATH"
EOF
source /etc/profile.d/java.sh

IDEA:三处版本要一致

IDEA 里至少有三处 JDK 配置,任何一处不一致都可能出现“命令行能跑、IDEA 报错”:

  1. Project Structure → Project:Project SDK 和 Language level;
  2. Settings → Build Tools → Maven → Importing:Maven 使用的 JDK;
  3. Settings → Build Tools → Compiler → Java Compiler:Target bytecode version。

如果是 Maven 项目,还要看 pom.xml:

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

新项目更推荐用 <maven.compiler.release>17</maven.compiler.release>,它同时约束 API 和字节码版本,避免“用 17 编译、却调用了 8 没有的 API”。

第一个程序

新建 Hello.java:

public class Hello {
    public static void main(String[] args) {
        String name = args.length > 0 ? args[0] : "Java";
        System.out.println("Hello, " + name + "!");
        System.out.println("Java version: " + System.getProperty("java.version"));
    }
}

命令行编译运行:

javac -encoding UTF-8 Hello.java
java Hello 世界

输出类似:

Hello, 世界!
Java version: 17.0.x

常见坑

1. java 能用,javac 不能用

说明 PATH 里只有 JRE 或 javapath,没有 JDK 的 bin。执行:

where java
where javac

Windows 下把 %JAVA_HOME%\bin 放到最前面,再开一个新的命令行窗口(旧窗口不会自动刷新环境变量)。

2. 多版本冲突

where java
# Linux/macOS
which -a java

按输出顺序确认实际使用的是哪一个。临时切换可以只改当前窗口:

set JAVA_HOME=C:\dev\jdk-8
set Path=%JAVA_HOME%\bin;%Path%

3. UnsupportedClassVersionError

这个错误的本质是“编译时 JDK 高,运行时 JDK 低”。常见字节码版本:

JDK major version
8 52
11 55
17 61
21 65

报 class file version 61.0,说明类是用 JDK 17 编译的,但运行环境是 8/11。统一编译和运行版本即可。

4. IDEA 改了版本仍然报错

依次检查:Project SDK、Language level、Maven Importer JDK、Compiler target、pom.xml 的 compiler 配置,最后执行:

mvn clean compile

并 File → Invalidate Caches / Restart。IDEA 的缓存和 Maven 的 target 目录都可能保留旧字节码。

5. 中文乱码

Windows 控制台默认编码可能是 GBK。编译时显式指定:

javac -encoding UTF-8 Hello.java
java -Dfile.encoding=UTF-8 Hello

IDEA 中把 File Encodings 统一为 UTF-8,并勾选 Transparent native-to-ASCII conversion(仅 properties 文件需要时)。

验证清单

  • java -version、javac -version 输出版本一致;
  • echo %JAVA_HOME%(Linux 用 echo $JAVA_HOME)指向 JDK 根目录;
  • IDEA 的 Project SDK、Language level、Maven Importer、Compiler target 一致;
  • 能编译并运行 Hello.java,中文输出正常;
  • java -XshowSettings:properties -version 能看到 java.home 和 file.encoding。

三个高频问题速查

公司内网下载不了 JDK 怎么办? 优先使用公司镜像源或 OpenJDK 发行版(Temurin、Zulu、Corretto),不要从不明网盘下载修改版安装包;安装后同样核对 java -version 与 javac -version。

装了多个 JDK,Maven 怎么固定版本? 除了 JAVA_HOME,还要在 ~/.m2/settings.xml 或 IDE 的 Maven Runner 里指定 JDK;命令行可用 mvn -version 确认 Maven 实际使用的 Java 版本,避免“IDEA 是 17、Maven 是 8”。

IDEA 控制台中文乱码? 把 IDEA 的 File Encodings、Run Configuration 的 VM options(-Dfile.encoding=UTF-8)和终端编码统一;Windows 下不要只改其中一处。

参考

评论

推荐阅读

订阅邮件

订阅更新,及时收到最新文章。

作者