背景:
当我们一个模块的代码具有多个不同jdk版本的时候,如果我们想统一编译,这时我们可以使用maven-compiler-plugin插件。我们可以将这些jdk的版本号,还有类型都定义在一个toolchains.xml文件里面。而在pom.xml文件中只需要引用toolchains.xml中定义的别名就可以了。
Toolchains是和pom中其他的plugin结合起来使用的,比如最常用的maven-compiler-plugin。
首先定义toolchains.xml文件,这个文件最好放在${user.home}/.m2/中。
<?xml version="1.0" encoding="UTF8"?>
<toolchains>
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>17</version>
<vendor>oracle</vendor>
</provides>
<configuration>
<jdkHome>D:\jdk\jdk-17</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>8</version>
<vendor>oracle</vendor>
</provides>
<configuration>
<jdkHome>D:\jdk\jdk-1.8</jdkHome>
</configuration>
</toolchain>
</toolchains>
上面我们定义了2个JDK的toolchains,一个JDK17,一个JDK8,下面看下怎么在pom文件中使用:
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>17</version>
<vendor>oracle</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
...
</plugins>
上面的pom配置文件中,我们通过简单的引用toolchains中的定义,即可无缝的进行JDK版本的切换。当有不同的模块需要使用不同版本的jdk时,只需要在各自的pom中引入上面的配置并配置好要使用的jdk版本即可。
Toolchains需要Maven 2.0.9以上版本的支持。
Toolchains是需要和pom中的plugin一起使用的,下面的图中列出了toolchains支持的plugin名字和最低的版本要求。