Maven报invalid target release:12错误,JAVA_HOME已设为12如何解决?
我来帮你排查这个Maven编译报错的问题——你遇到的invalid target release: 12,通常是Maven实际使用的JDK和你配置的版本不匹配导致的,咱们一步步来解决:
1. 先确认Maven真正在用哪个Java版本
你提到mvn -version显示了Maven 3.6.1,但没说它关联的Java版本。赶紧执行完整的mvn -version命令,看输出里的Java version字段——如果这里显示的不是12,那就是Maven没读取到你设置的JAVA_HOME,这是最常见的原因。
解决办法:
- 在Linux环境下,确保
JAVA_HOME的配置全局生效:
编辑~/.bashrc或/etc/profile文件,添加以下内容(把/path/to/your/jdk12换成你实际的JDK12路径):
然后执行export JAVA_HOME=/path/to/your/jdk12 export PATH=$JAVA_HOME/bin:$PATHsource ~/.bashrc(如果改的是/etc/profile就执行source /etc/profile)让设置生效,再重新运行mvn -version确认Java版本已经变成12。 - 如果是在IDE里运行Maven,别忘检查IDE的配置:找到Maven的运行环境设置,确保它指定的JDK是12版本,而不是系统默认的旧JDK。
2. 检查javac版本是否和java匹配
你只验证了java -version是12,但Maven编译时用的是javac命令。执行javac -version看看,如果输出不是12,说明系统优先调用了旧版本的javac。
解决办法:
- 按照步骤1的方式把
JAVA_HOME/bin放到PATH的最前面,确保系统先找到JDK12的javac,再重新检查javac -version是否正确。
3. 优化Maven Compiler插件的配置
你的pom.xml里已经设置了source和target,但可以进一步明确配置,强制插件使用指定的JDK,避免歧义:
修改maven-compiler-plugin的配置,添加source、target、fork和executable参数:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <useIncrementalCompilation>true</useIncrementalCompilation> <!-- 明确指定编译的source和target版本 --> <source>12</source> <target>12</target> <!-- 强制插件使用JAVA_HOME下的javac,避免用系统默认的 --> <fork>true</fork> <executable>${JAVA_HOME}/bin/javac</executable> <compilerArgs> <arg>-parameters</arg> <arg>-Xlint:unchecked</arg> <arg>--enable-preview</arg> </compilerArgs> </configuration> </plugin>
另外,更推荐使用maven.compiler.release替代单独的source和target,它会统一处理编译的版本兼容性(包括source、target和bootclasspath),配置更简洁可靠:
<properties> <maven.compiler.release>12</maven.compiler.release> </properties>
4. 关于预览特性的小提醒
你用到了--enable-preview参数,Java的预览特性需要编译和运行时都启用该参数。如果后续运行项目,记得也要加上--enable-preview参数,否则会出现运行时错误。
按照上面的步骤逐一排查,应该就能顺利解决编译报错的问题了。
内容的提问来源于stack exchange,提问作者Arthur

