Maven使用不同版本的JDK编译

Maven 在打包的时候可以指定source 和 target 从而可以实现高版本JDK编译的Class 兼容低版本的JDK,但不是完全可靠的,有时候还是会有异常发生。参考《java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet() 异常分析》。为了安全起见可以使用不同的JKD进行编译。

配置方式使用不同的JDK

POM文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable><!-- path-to-javac --></executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>

为了路径可以灵活的配置切换,可以定义一个属性

1
<executable>${JAVA_1_4_HOME}/bin/javac</executable>

属性值在Maven setting.xml 配置文件中进行配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<settings>
[...]
<profiles>
[...]
<profile>
<id>compiler</id>
<properties>
<JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
</properties>
</profile>
</profiles>
[...]
<activeProfiles>
<activeProfile>compiler</activeProfile>
</activeProfiles>
</settings>

命令方式使用不同的JDK

在执行Maven命令前修改JAVA_HOME的环境变量,从而达到切换JDK的目的。

  • windows

    1
    set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_20
  • Linux or Mac

    1
    export JAVA_HOME=<java-8-home-folder>
  • 执行完上述命令可以进行测试

    1
    mvn –version

参考《Compiling Sources Using A Different JDK
参考 https://www.oreilly.com/library/view/apache-maven-cookbook/9781785286124/ch01s05.html