在使用Java 8执行Maven操作的同时,使用Java 6进行编译,使用Java 11进行测试

在开发框架时,由于后向兼容性的需求,有时需要在Java 6上进行编译。
此外,虽然在新任务中不会使用旧版的JDK,但我们希望在进行测试时能够在Java 6、7、8和11上执行,即使编译是在Java 6上进行的。

最近的Maven在Java 6下无法运行,但是如果做一些调整,可以让Maven本身在Java 8下运行,同时使用Java 6进行编译,使用Java 11进行测试。

通过maven-compiler-plugin的executable选项指定javac命令,可以在任意JDK上进行编译。
通过maven-surefire-plugin的jvm选项指定java命令,可以在任意JDK上进行测试。
这两个插件都可以通过系统属性进行配置。

指令的例子如下所示。

export JAVA_HOME=/path/to/jdk8
mvn -Dmaven.compiler.executable=/path/to/jdk6/bin/javac \
    -Dmaven.compiler.fork=true \
    -Djvm=/path/to/jdk11/bin/java \
    test

请参考

    • https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#executable

 

    • https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#fork

 

    https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#jvm