Maven "invalid target release: 11" 问题解决方案
问题描述
当在 Maven 项目中使用 Java 11 时,可能会遇到以下错误信息:
Fatal error compiling: invalid target release: 11
这个问题通常发生在以下情况:
- 本地安装了多版本 JDK
- Maven 未正确配置使用 Java 11
- 环境变量设置有误
即使 java -version
和 JAVA_HOME
环境变量显示正确版本,Maven 仍可能使用错误的 JDK 版本进行编译。
解决方案
1. 检查并配置环境变量
首先确认系统环境变量设置正确:
# 检查当前 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 版本:
mvn --version
如果输出显示 Maven 仍在使用 Java 8 或其他版本,需要:
方法一:修改 Maven 启动脚本
找到 Maven 的 bin/mvn
或 bin/mvn.cmd
文件,在文件开头添加:
# 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 版本:
# 安装 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 插件:
<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>
<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 版本:
<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 用户:
- File → Project Structure → Project Settings → Project
- 确保 Project SDK 和 Project language level 设置为 Java 11
- File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner
- 确认 JRE 设置为正确的 JDK 11
Eclipse 用户:
- Window → Preferences → Java → Installed JREs
- 添加或选择 JDK 11
- 右键项目 → Properties → Java Build Path → Libraries
- 确保使用正确的 JRE System Library
常见问题排查
路径优先级问题:检查系统 PATH 环境变量中 JDK 11 的路径是否在 JDK 8 之前
多版本冲突:如果安装了多个 Maven 版本,确保使用的是正确配置的那个
缓存问题:尝试清理 Maven 缓存:
bashmvn clean
JDK 供应商问题:某些情况下,更换 JDK 供应商(如从 OpenJDK 切换到 Corretto)可能解决问题
总结
解决 "invalid target release: 11" 错误的关键是确保:
- 系统环境变量
JAVA_HOME
指向正确的 JDK 11 - Maven 配置正确,包括编译器插件设置
- IDE 中的项目配置与 Maven 配置一致
使用 SDKMAN! 等版本管理工具可以有效避免多版本 Java 的环境冲突问题。