Maven:使用不同的Java版本进行编译和测试执行

Maven:使用不同的Java版本进行编译和测试执行,java,maven,maven-3,maven-surefire-plugin,Java,Maven,Maven 3,Maven Surefire Plugin,如何使用系统的默认Java版本(例如,$Java_HOME中指定的Java 8.0)编译main和test源代码,但使用不同的Java安装在Maven中执行JUnit测试(例如Java 11.0) 此问题与之前的一些问题不同,这些问题希望使用不同的目标源代码版本,或使用不同的编译器来测试主和源代码: 我想对Maven的compile和test compile目标使用相同的编译器(例如Java 8.0),但通过另一个Java安装(例如Java 11.0)执行Maven的test目标的所有J

如何使用系统的默认Java版本(例如,
$Java_HOME
中指定的Java 8.0)编译
main
test
源代码,但使用不同的Java安装在Maven中执行JUnit测试(例如Java 11.0)

此问题与之前的一些问题不同,这些问题希望使用不同的目标源代码版本,或使用不同的编译器来测试
源代码:

我想对Maven的
compile
test compile
目标使用相同的编译器(例如Java 8.0),但通过另一个Java安装(例如Java 11.0)执行Maven的
test
目标的所有JUnit测试

我使用
mavensurefire
执行单元测试。 我正在寻找一个简洁明了的解决方案,我不想使用
maven工具链

但是如果使用
maven工具链是唯一可能的解决方案,那么就这样吧。

首先,真正的问题是什么?为什么不使用JDK11来运行一切?所以您可以设置
8
,然后保持与JDK 8的兼容性?干净的解决方案要么是maven工具链。。。或者甚至可以更好地通过CI和JDK编译/构建您的项目?您想保持与JDK 8的兼容性吗?@khmarbaise问题是如何顺利过渡到后Java-8.0。如果您查看Oracle的迁移指南,第一步是使用Java-11.0运行应用程序,而不必进行编译以查看它是否有效。这意味着不需要更改编译器,只需运行测试并查看运行情况。。。因为很多项目同时已经在做这些了。。。我建议您创建应用程序的一个分支,并在CI上使用不同的JDK运行。。。就这样。。。。。为什么我不应该用JDK 11编译我的应用程序?只需使用JDK11(Release8)构建它,然后继续。。。在此期间,我将几个应用程序迁移到JDK 11的最低级别。。。CI是关键。。。