1. 概述

在本篇教程中,我们将介绍如何在 Maven 项目中设置 Java 版本。

在开始之前,你可以通过运行 mvn -v 命令来查看 Maven 默认使用的 JDK 版本。这个命令会输出 Maven 当前运行所依赖的 Java 环境版本。

2. 使用 Maven Compiler 插件

最常见的方式是通过 maven-compiler-plugin 来指定 Java 版本。

2.1. 配置 Compiler 插件属性

第一种方式是在 pom.xml<properties> 标签中配置:

<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

这里的 source 表示源代码的 Java 版本(例如是否支持 Lambda 表达式),而 target 则表示编译后生成的字节码版本,用于确保与目标 JVM 兼容。

默认情况下,这两个值都是 1.6。

✅ 如果你想更精细地控制编译行为,可以直接在插件配置中指定:

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

⚠️ 注意:这种方式更适合需要额外编译参数或自定义配置的场景。

2.2. Java 9 及以上版本支持

从 JDK 9 开始,新增了一个编译选项:--release。它能自动处理跨平台兼容性问题。

❌ 传统的 -source-target 并不能完全保证跨平台兼容性,尤其当你想在新版本 JDK 上编译出能在旧版本运行的 class 文件时,还需要配合 -bootclasspath 参数。

✅ 而使用 --release 就可以一步到位,它相当于同时设置了 -source-target-bootclasspath

举个例子,在 pom.xml 的属性中可以这样写:

<properties>
    <maven.compiler.release>17</maven.compiler.release>
</properties>

或者在 maven-compiler-plugin 中直接配置(适用于 3.6+ 版本):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.12.1</version>
    <configuration>
        <release>7</release>
    </configuration>
</plugin>

在这个例子中,我们使用的是 Java 17 编译器去构建兼容 Java 7 的 class 文件。无需本地安装 JDK 7,因为高版本 JDK 已经内置了对低版本 API 的兼容支持。

3. Spring Boot 项目的特殊处理

如果你的项目是基于 Spring Boot 的,那设置 Java 版本的方式略有不同。

首先你需要引入 spring-boot-starter-parent 作为父 POM:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
</parent>

该父 POM 默认将 Java 版本设置为 1.8。

你可以通过覆盖 <java.version> 属性来自定义:

<properties>
    <java.version>17</java.version>
</properties>

⚠️ 这个属性是 Spring Boot 特有的机制。它会同时影响源码和目标 JVM 的版本。

⚠️ 另外请注意:Spring Boot 2.0 起最低要求 Java 8,因此你无法再将 Java 版本设为更低的版本(比如 1.7)。

4. 总结

本文总结了几种在 Maven 项目中设置 Java 版本的方法:

  • ✅ 对于 Spring Boot 项目,推荐使用 <java.version> 属性。
  • ✅ 对于普通项目,使用 <maven.compiler.source><maven.compiler.target> 是最常见且简洁的方式。
  • ✅ 如果需要更强的控制能力,建议直接配置 maven-compiler-plugin 插件。
  • ✅ 若使用 Java 9 或更高版本,优先考虑使用 <release> 属性以实现更好的跨平台兼容性。

选择哪种方式取决于你的项目类型和具体需求,合理使用可以让构建过程更加清晰可控。


原始标题:Setting the Java Version in Maven