在使用 Maven 管理 Java 项目时,有时需要指定使用特定的 JDK 版本。这通常是因为项目需要与特定版本的 JDK 兼容,或者在不同的开发环境中需要确保使用正确的 JDK 版本。通常来说在IDEA工具中设置了正确的JDK版本,使用IDEA编译也不会有任何异常,但是使用mvn命令编译时则会出现异常。
1.错误案例
JAVA_HOME是java 1.8,但是开发环境使用了java 23,使用IDEA编译不报错,但是使用mvn报错,虽然设置了编译版本,但是因为mvn使用了JAVA_HOME作为JDK,所以一直提示无效的目标发行版: 23。
2.解决方案
1. 指定mvn的jdk
Maven 支持通过 toolchains 来指定 JDK 版本,在maven中的toolchains.xml
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>23</version>
<vendor>openjdk</vendor>
</provides>
<configuration>
<jdkHome>C:\SoftProgram\open jdk-23.0.2</jdkHome>
</configuration>
</toolchain>
</toolchains>
然后pom.xml
中引用这个 toolchain
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>23</version>
<vendor>openjdk</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
使用mvn clean compile不会再提示无效的目标发行版: 23,而且通过编译日志也可以看到使用了配置的jdk,但是依旧会编译报错,因为mvn依旧使用JAVA_HOME执行编译。
2.修改JAVA_HOME环境变量
因为mvn一直使用了不正确的JAVA_HOME环境变量,所以不管pom.xml如何设置mvn编译总是会报错,所以需要设置JAVA_HOME的环境变量。
export JAVA_HOME=/path/to/jdk-11 # Linux/Mac
//windows这种方式只会在一个命令框生效,不会永久改变。
set JAVA_HOME=C:\SoftProgram\open jdk-23.0.2 # Windows
设置完成之后查看mvn -v
然后重新执行编译成功