Skip to content

Maven "invalid target release: 11" 问题解决方案

问题描述

当在 Maven 项目中使用 Java 11 时,可能会遇到以下错误信息:

Fatal error compiling: invalid target release: 11

这个问题通常发生在以下情况:

  • 本地安装了多版本 JDK
  • Maven 未正确配置使用 Java 11
  • 环境变量设置有误

即使 java -versionJAVA_HOME 环境变量显示正确版本,Maven 仍可能使用错误的 JDK 版本进行编译。

解决方案

1. 检查并配置环境变量

首先确认系统环境变量设置正确:

bash
# 检查当前 Java 版本
java -version

# 检查 JAVA_HOME 变量
echo %JAVA_HOME%  # Windows
echo $JAVA_HOME   # Linux/Mac

确保 JAVA_HOME 指向正确的 JDK 11 安装路径,例如:

  • Windows: C:\Program Files\Java\jdk-11.0.x
  • Mac/Linux: /Library/Java/JavaVirtualMachines/jdk-11.0.x/Contents/Home

TIP

如果发现 JAVA_HOME 指向错误版本,需要更新环境变量:

  • Windows: 系统属性 → 高级 → 环境变量
  • Mac/Linux: 编辑 ~/.bash_profile~/.bashrc

2. 检查 Maven 配置

确认 Maven 使用的 Java 版本:

bash
mvn --version

如果输出显示 Maven 仍在使用 Java 8 或其他版本,需要:

方法一:修改 Maven 启动脚本

找到 Maven 的 bin/mvnbin/mvn.cmd 文件,在文件开头添加:

bash
# Unix/Linux/Mac (mvn脚本)
export JAVA_HOME=/path/to/jdk-11

# Windows (mvn.cmd文件)
set JAVA_HOME=C:\path\to\jdk-11

方法二:使用 SDKMAN! (推荐)

SDKMAN! 是多版本 Java 管理工具,可以轻松切换 JDK 版本:

bash
# 安装 SDKMAN!
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# 查看可用的 Java 版本
sdk list java

# 安装并设置默认 Java 11
sdk install java 11.0.13.8.1-amzn
sdk default java 11.0.13.8.1-amzn

3. 配置 Maven Compiler 插件

pom.xml 中正确配置 Maven Compiler 插件:

xml
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>11</release> <!-- 使用release参数替代source/target -->
            </configuration>
        </plugin>
    </plugins>
</build>
xml
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
    </plugins>
</build>

WARNING

使用 <release> 参数比分别设置 <source><target> 更推荐,因为它能确保使用正确的语言级别和API版本。

4. 配置项目属性

pom.xml<properties> 部分设置 Java 版本:

xml
<properties>
    <java.version>11</java.version>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

5. IDE 配置检查

IntelliJ IDEA 用户:

  1. File → Project Structure → Project Settings → Project
  2. 确保 Project SDK 和 Project language level 设置为 Java 11
  3. File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner
  4. 确认 JRE 设置为正确的 JDK 11

Eclipse 用户:

  1. Window → Preferences → Java → Installed JREs
  2. 添加或选择 JDK 11
  3. 右键项目 → Properties → Java Build Path → Libraries
  4. 确保使用正确的 JRE System Library

常见问题排查

  1. 路径优先级问题:检查系统 PATH 环境变量中 JDK 11 的路径是否在 JDK 8 之前

  2. 多版本冲突:如果安装了多个 Maven 版本,确保使用的是正确配置的那个

  3. 缓存问题:尝试清理 Maven 缓存:

    bash
    mvn clean
  4. JDK 供应商问题:某些情况下,更换 JDK 供应商(如从 OpenJDK 切换到 Corretto)可能解决问题

总结

解决 "invalid target release: 11" 错误的关键是确保:

  1. 系统环境变量 JAVA_HOME 指向正确的 JDK 11
  2. Maven 配置正确,包括编译器插件设置
  3. IDE 中的项目配置与 Maven 配置一致

使用 SDKMAN! 等版本管理工具可以有效避免多版本 Java 的环境冲突问题。