For general information about Maven Toolchains, see Guide to Using Toolchains
Using Maven Toolchains with Surefire
By default, if the pom configures the toolchains plugin as specified in the aforementioned guide, Surefire will launch the test jvm using the main toolchain configured in Maven.
In some cases, it may be desirable to compile and test using different jvms. While the jvm
option can achieve this, it requires hardcoding system-specific paths. Configuration option jdkToolchain
can be used to supply an alternate toolchain specification.
Configuring a different jvm for running tests using toolchains
<configuration> [...] <jdkToolchain> <version>8</version> <vendor>zulu</vendor> </jdkToolchain> [...] </configuration>
The above example assumes that your `toolchains.xml` contains a valid entry with these values.
Minimum Java Version for Toolchains
The minimum version of Java that can be used as a toolchain is limited by the Surefire Booter requirement.
Surefire Version | Minimum Java Version | Class File Version |
---|---|---|
3.0.0-M6 or higher | Java 8 | 52 |
3.0.0-M5 and lower | Java 7 | 51 |
lower than 3.0.0-M1 | Java 6 | 50 |
If you try to use a version older than the minimum supported version, you should face something like:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/surefire/booter/ForkedBooter: Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)