You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Delany <de...@gmail.com> on 2021/08/26 13:30:31 UTC
maven-surefire-plugin jdkToolchain meets forkCount
Hi. Im having trouble with the jdkToolchain feature of maven-surefire-plugin
https://maven.apache.org/surefire/maven-surefire-plugin/examples/toolchains.html
This is my working build tag
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<jdkToolchain>
<version>9</version>
</jdkToolchain>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-toolchains-plugin</artifactId>
<executions>
<execution>
<configuration>
<toolchains>
<jdk>
<version>9</version>
</jdk>
</toolchains>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
I can build with the above config no problem, but if I configure the
compile plugin with <target>9</target>, surefire throws
> Execution default-test of goal
org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test failed:
java.lang.UnsupportedClassVersionError:
com/etc/common/crypto/clientreference/TestClientToken has been compiled by
a more recent version of the Java Runtime (class file version 53.0), this
version of the Java Runtime only recognizes class file versions up to 52.0
In either case I can see the toolchain being configured in the build log
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @
cryptocommon ---
[INFO] Toolchain in maven-compiler-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 7 source files to
/git/tep22x/common_cryptocommon/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @
cryptocommon ---
[INFO] Toolchain in maven-surefire-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
Now, if on top of my changes thus far I go and configure surefire-plugin
with <forkCount>1</forkCount>, it's back to a successful build.
But, if I follow the advice of
https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html
and rather set <forkCount>0</forkCount>, I get this
[ERROR] Exception in provider
[ERROR] org.apache.maven.surefire.booter.SurefireExecutionException:
Exception in provider
[ERROR] at
org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:91)
[ERROR] at
org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1295)
[ERROR] at
org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1159)
[ERROR] at
org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:932)
[ERROR] at
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
[ERROR] at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
[ERROR] at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
[ERROR] at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
[ERROR] at
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR] at
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:196)
[ERROR] at
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:186)
[ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[ERROR] at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[ERROR] at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[ERROR] at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[ERROR] at java.lang.Thread.run(Thread.java:748)
[ERROR] Caused by: java.lang.UnsupportedClassVersionError:
com/traderoot/common/crypto/clientreference/TestClientToken has been
compiled by a more recent version of the Java Runtime (class file version
53.0), this version of the Java Runtime only recognizes class f
ile versions up to 52.0
[ERROR] at java.lang.ClassLoader.defineClass1(Native Method)
[ERROR] at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
[ERROR] at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
[ERROR] at
java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
[ERROR] at
java.net.URLClassLoader.access$100(URLClassLoader.java:74)
[ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
[ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
[ERROR] at java.security.AccessController.doPrivileged(Native
Method)
[ERROR] at
java.net.URLClassLoader.findClass(URLClassLoader.java:362)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
[ERROR] at
org.apache.maven.surefire.booter.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:100)
[ERROR] at
org.apache.maven.surefire.api.util.DefaultScanResult.loadClass(DefaultScanResult.java:136)
[ERROR] at
org.apache.maven.surefire.api.util.DefaultScanResult.applyFilter(DefaultScanResult.java:100)
[ERROR] at
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:147)
[ERROR] at
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:128)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
[ERROR] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR] at
org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:167)
[ERROR] at
org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:161)
[ERROR] at
org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:84)
[ERROR] at
org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:87)
[ERROR] ... 16 more
I don't like guessing what is going on here, but i'm not in a position to
go that extra mile and "Run Maven with -Dmaven.surefire.debug, and attach
to the running process with a debugger."
In a nutshell my question is "how can I build with a JDK 9 or above using a
toolchain and without being limited to a single test fork?"
Thanks,
Delany
Re: maven-surefire-plugin jdkToolchain meets forkCount
Posted by Mantas Gridinas <mg...@gmail.com>.
From the looks of it, your toolchains plugin might not get executed.
Are you sure you've configured execution phase to "validate" in
toolchains plugin? Last when I had to use toolchains plugin I don't
remember needing to configure particular surefire properties. See
java9 with toolchains.xml
https://maven.apache.org/surefire/maven-surefire-plugin/java9.html
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>9</version>
</jdk>
</toolchains>
</configuration>
</plugin>
On Thu, Aug 26, 2021 at 1:31 PM Delany <de...@gmail.com> wrote:
>
> Hi. Im having trouble with the jdkToolchain feature of maven-surefire-plugin
> https://maven.apache.org/surefire/maven-surefire-plugin/examples/toolchains.html
> This is my working build tag
>
> <build>
> <pluginManagement>
> <plugins>
> <plugin>
> <artifactId>maven-compiler-plugin</artifactId>
> <configuration>
> <source>8</source>
> <target>8</target>
> </configuration>
> </plugin>
> <plugin>
> <artifactId>maven-surefire-plugin</artifactId>
> <configuration>
> <jdkToolchain>
> <version>9</version>
> </jdkToolchain>
> </configuration>
> </plugin>
> </plugins>
> </pluginManagement>
> <plugins>
> <plugin>
> <artifactId>maven-toolchains-plugin</artifactId>
> <executions>
> <execution>
> <configuration>
> <toolchains>
> <jdk>
> <version>9</version>
> </jdk>
> </toolchains>
> </configuration>
> </execution>
> </executions>
> </plugin>
> </plugins>
> </build>
>
> I can build with the above config no problem, but if I configure the
> compile plugin with <target>9</target>, surefire throws
>
> > Execution default-test of goal
> org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test failed:
> java.lang.UnsupportedClassVersionError:
> com/etc/common/crypto/clientreference/TestClientToken has been compiled by
> a more recent version of the Java Runtime (class file version 53.0), this
> version of the Java Runtime only recognizes class file versions up to 52.0
>
> In either case I can see the toolchain being configured in the build log
>
> [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @
> cryptocommon ---
> [INFO] Toolchain in maven-compiler-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
> [INFO] Changes detected - recompiling the module!
> [INFO] Compiling 7 source files to
> /git/tep22x/common_cryptocommon/target/test-classes
> [INFO]
> [INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @
> cryptocommon ---
> [INFO] Toolchain in maven-surefire-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
>
> Now, if on top of my changes thus far I go and configure surefire-plugin
> with <forkCount>1</forkCount>, it's back to a successful build.
>
> But, if I follow the advice of
> https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html
> and rather set <forkCount>0</forkCount>, I get this
>
> [ERROR] Exception in provider
> [ERROR] org.apache.maven.surefire.booter.SurefireExecutionException:
> Exception in provider
> [ERROR] at
> org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:91)
> [ERROR] at
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1295)
> [ERROR] at
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1159)
> [ERROR] at
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:932)
> [ERROR] at
> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
> [ERROR] at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
> [ERROR] at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
> [ERROR] at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
> [ERROR] at
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
> [ERROR] at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:196)
> [ERROR] at
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:186)
> [ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> [ERROR] at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> [ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> [ERROR] at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> [ERROR] at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> [ERROR] at java.lang.Thread.run(Thread.java:748)
> [ERROR] Caused by: java.lang.UnsupportedClassVersionError:
> com/traderoot/common/crypto/clientreference/TestClientToken has been
> compiled by a more recent version of the Java Runtime (class file version
> 53.0), this version of the Java Runtime only recognizes class f
> ile versions up to 52.0
> [ERROR] at java.lang.ClassLoader.defineClass1(Native Method)
> [ERROR] at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
> [ERROR] at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
> [ERROR] at
> java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
> [ERROR] at
> java.net.URLClassLoader.access$100(URLClassLoader.java:74)
> [ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
> [ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
> [ERROR] at java.security.AccessController.doPrivileged(Native
> Method)
> [ERROR] at
> java.net.URLClassLoader.findClass(URLClassLoader.java:362)
> [ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
> [ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
> [ERROR] at
> org.apache.maven.surefire.booter.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:100)
> [ERROR] at
> org.apache.maven.surefire.api.util.DefaultScanResult.loadClass(DefaultScanResult.java:136)
> [ERROR] at
> org.apache.maven.surefire.api.util.DefaultScanResult.applyFilter(DefaultScanResult.java:100)
> [ERROR] at
> org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:147)
> [ERROR] at
> org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:128)
> [ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> [ERROR] at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> [ERROR] at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> [ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
> [ERROR] at
> org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:167)
> [ERROR] at
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:161)
> [ERROR] at
> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:84)
> [ERROR] at
> org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:87)
> [ERROR] ... 16 more
>
> I don't like guessing what is going on here, but i'm not in a position to
> go that extra mile and "Run Maven with -Dmaven.surefire.debug, and attach
> to the running process with a debugger."
>
> In a nutshell my question is "how can I build with a JDK 9 or above using a
> toolchain and without being limited to a single test fork?"
>
> Thanks,
> Delany
--
// Mantas
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org
Re: maven-surefire-plugin jdkToolchain meets forkCount
Posted by Delany <de...@gmail.com>.
Yes it looks that way. I changed the system jdk to 16 and now I can pick a
jdk with the toolchains plugin and without any surefire config.
Its basically https://issues.apache.org/jira/browse/MTOOLCHAINS-28 all over
again but with surefire-plugin
Want a ticket?
Delany
On Thu, 26 Aug 2021 at 17:50, Thomas Broyer <t....@gmail.com> wrote:
> IIUC, with forkCount=0, you're disabling forking, so everything happens in
> the Maven process itself and won't use the configured toolchain. If you're
> running Maven with a JDK < 9 then you'd have that
> UnsupportedClassVersionError.
>
> For the first case, with forkCount being its default value (forkCount=1) I
> suppose, can you share the stacktrace?
> It might be (I haven't checked) that the plugin looks at (loads) the
> compiled classes to determine how to actually fork/run the tests (e.g.
> determine if a given class is a test class, by looking at the @Test
> annotations with JUnit 4 for instance). If that's the case then it means
> you have to run Maven with a JDK version greater than the one you'd want to
> use as a toolchain. In other words you can run Maven with JDK 11 to run
> your tests with JDK 8, but not run Maven with JDK 8 to run tests with JDK
> 11.
>
> On Thu, Aug 26, 2021 at 3:32 PM Delany <de...@gmail.com> wrote:
>
> > Hi. Im having trouble with the jdkToolchain feature of
> > maven-surefire-plugin
> >
> >
> https://maven.apache.org/surefire/maven-surefire-plugin/examples/toolchains.html
> > This is my working build tag
> >
> > <build>
> > <pluginManagement>
> > <plugins>
> > <plugin>
> > <artifactId>maven-compiler-plugin</artifactId>
> > <configuration>
> > <source>8</source>
> > <target>8</target>
> > </configuration>
> > </plugin>
> > <plugin>
> > <artifactId>maven-surefire-plugin</artifactId>
> > <configuration>
> > <jdkToolchain>
> > <version>9</version>
> > </jdkToolchain>
> > </configuration>
> > </plugin>
> > </plugins>
> > </pluginManagement>
> > <plugins>
> > <plugin>
> > <artifactId>maven-toolchains-plugin</artifactId>
> > <executions>
> > <execution>
> > <configuration>
> > <toolchains>
> > <jdk>
> > <version>9</version>
> > </jdk>
> > </toolchains>
> > </configuration>
> > </execution>
> > </executions>
> > </plugin>
> > </plugins>
> > </build>
> >
> > I can build with the above config no problem, but if I configure the
> > compile plugin with <target>9</target>, surefire throws
> >
> > > Execution default-test of goal
> > org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test failed:
> > java.lang.UnsupportedClassVersionError:
> > com/etc/common/crypto/clientreference/TestClientToken has been compiled
> by
> > a more recent version of the Java Runtime (class file version 53.0), this
> > version of the Java Runtime only recognizes class file versions up to
> 52.0
> >
> > In either case I can see the toolchain being configured in the build log
> >
> > [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile)
> @
> > cryptocommon ---
> > [INFO] Toolchain in maven-compiler-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
> > [INFO] Changes detected - recompiling the module!
> > [INFO] Compiling 7 source files to
> > /git/tep22x/common_cryptocommon/target/test-classes
> > [INFO]
> > [INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @
> > cryptocommon ---
> > [INFO] Toolchain in maven-surefire-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
> >
> > Now, if on top of my changes thus far I go and configure surefire-plugin
> > with <forkCount>1</forkCount>, it's back to a successful build.
> >
> > But, if I follow the advice of
> >
> >
> https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html
> > and rather set <forkCount>0</forkCount>, I get this
> >
> > [ERROR] Exception in provider
> > [ERROR] org.apache.maven.surefire.booter.SurefireExecutionException:
> > Exception in provider
> > [ERROR] at
> >
> >
> org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:91)
> > [ERROR] at
> >
> >
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1295)
> > [ERROR] at
> >
> >
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1159)
> > [ERROR] at
> >
> >
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:932)
> > [ERROR] at
> >
> >
> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
> > [ERROR] at
> >
> >
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
> > [ERROR] at
> >
> >
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
> > [ERROR] at
> >
> >
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
> > [ERROR] at
> >
> >
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
> > [ERROR] at
> >
> >
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:196)
> > [ERROR] at
> >
> >
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:186)
> > [ERROR] at
> java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > [ERROR] at
> > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> > [ERROR] at
> java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > [ERROR] at
> >
> >
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> > [ERROR] at
> >
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> > [ERROR] at java.lang.Thread.run(Thread.java:748)
> > [ERROR] Caused by: java.lang.UnsupportedClassVersionError:
> > com/traderoot/common/crypto/clientreference/TestClientToken has been
> > compiled by a more recent version of the Java Runtime (class file version
> > 53.0), this version of the Java Runtime only recognizes class f
> > ile versions up to 52.0
> > [ERROR] at java.lang.ClassLoader.defineClass1(Native Method)
> > [ERROR] at
> java.lang.ClassLoader.defineClass(ClassLoader.java:756)
> > [ERROR] at
> > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
> > [ERROR] at
> > java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
> > [ERROR] at
> > java.net.URLClassLoader.access$100(URLClassLoader.java:74)
> > [ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
> > [ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
> > [ERROR] at java.security.AccessController.doPrivileged(Native
> > Method)
> > [ERROR] at
> > java.net.URLClassLoader.findClass(URLClassLoader.java:362)
> > [ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
> > [ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.booter.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:100)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.api.util.DefaultScanResult.loadClass(DefaultScanResult.java:136)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.api.util.DefaultScanResult.applyFilter(DefaultScanResult.java:100)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:147)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:128)
> > [ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > Method)
> > [ERROR] at
> >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > [ERROR] at
> >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > [ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:167)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:161)
> > [ERROR] at
> >
> >
> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:84)
> > [ERROR] at
> >
> >
> org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:87)
> > [ERROR] ... 16 more
> >
> > I don't like guessing what is going on here, but i'm not in a position to
> > go that extra mile and "Run Maven with -Dmaven.surefire.debug, and attach
> > to the running process with a debugger."
> >
> > In a nutshell my question is "how can I build with a JDK 9 or above
> using a
> > toolchain and without being limited to a single test fork?"
> >
> > Thanks,
> > Delany
> >
>
>
> --
> Thomas Broyer
> /tɔ.ma.bʁwa.je/ <http://xn--nna.ma.xn--bwa-xxb.je/> <
> http://xn--nna.ma.xn--bwa-xxb.je/>
>
Re: maven-surefire-plugin jdkToolchain meets forkCount
Posted by Thomas Broyer <t....@gmail.com>.
IIUC, with forkCount=0, you're disabling forking, so everything happens in
the Maven process itself and won't use the configured toolchain. If you're
running Maven with a JDK < 9 then you'd have that
UnsupportedClassVersionError.
For the first case, with forkCount being its default value (forkCount=1) I
suppose, can you share the stacktrace?
It might be (I haven't checked) that the plugin looks at (loads) the
compiled classes to determine how to actually fork/run the tests (e.g.
determine if a given class is a test class, by looking at the @Test
annotations with JUnit 4 for instance). If that's the case then it means
you have to run Maven with a JDK version greater than the one you'd want to
use as a toolchain. In other words you can run Maven with JDK 11 to run
your tests with JDK 8, but not run Maven with JDK 8 to run tests with JDK
11.
On Thu, Aug 26, 2021 at 3:32 PM Delany <de...@gmail.com> wrote:
> Hi. Im having trouble with the jdkToolchain feature of
> maven-surefire-plugin
>
> https://maven.apache.org/surefire/maven-surefire-plugin/examples/toolchains.html
> This is my working build tag
>
> <build>
> <pluginManagement>
> <plugins>
> <plugin>
> <artifactId>maven-compiler-plugin</artifactId>
> <configuration>
> <source>8</source>
> <target>8</target>
> </configuration>
> </plugin>
> <plugin>
> <artifactId>maven-surefire-plugin</artifactId>
> <configuration>
> <jdkToolchain>
> <version>9</version>
> </jdkToolchain>
> </configuration>
> </plugin>
> </plugins>
> </pluginManagement>
> <plugins>
> <plugin>
> <artifactId>maven-toolchains-plugin</artifactId>
> <executions>
> <execution>
> <configuration>
> <toolchains>
> <jdk>
> <version>9</version>
> </jdk>
> </toolchains>
> </configuration>
> </execution>
> </executions>
> </plugin>
> </plugins>
> </build>
>
> I can build with the above config no problem, but if I configure the
> compile plugin with <target>9</target>, surefire throws
>
> > Execution default-test of goal
> org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test failed:
> java.lang.UnsupportedClassVersionError:
> com/etc/common/crypto/clientreference/TestClientToken has been compiled by
> a more recent version of the Java Runtime (class file version 53.0), this
> version of the Java Runtime only recognizes class file versions up to 52.0
>
> In either case I can see the toolchain being configured in the build log
>
> [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @
> cryptocommon ---
> [INFO] Toolchain in maven-compiler-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
> [INFO] Changes detected - recompiling the module!
> [INFO] Compiling 7 source files to
> /git/tep22x/common_cryptocommon/target/test-classes
> [INFO]
> [INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @
> cryptocommon ---
> [INFO] Toolchain in maven-surefire-plugin: JDK[/usr/lib/jvm/zulu-9-amd64]
>
> Now, if on top of my changes thus far I go and configure surefire-plugin
> with <forkCount>1</forkCount>, it's back to a successful build.
>
> But, if I follow the advice of
>
> https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html
> and rather set <forkCount>0</forkCount>, I get this
>
> [ERROR] Exception in provider
> [ERROR] org.apache.maven.surefire.booter.SurefireExecutionException:
> Exception in provider
> [ERROR] at
>
> org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:91)
> [ERROR] at
>
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1295)
> [ERROR] at
>
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1159)
> [ERROR] at
>
> org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:932)
> [ERROR] at
>
> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
> [ERROR] at
>
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
> [ERROR] at
>
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
> [ERROR] at
>
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
> [ERROR] at
>
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
> [ERROR] at
>
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:196)
> [ERROR] at
>
> org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:186)
> [ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> [ERROR] at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> [ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> [ERROR] at
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> [ERROR] at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> [ERROR] at java.lang.Thread.run(Thread.java:748)
> [ERROR] Caused by: java.lang.UnsupportedClassVersionError:
> com/traderoot/common/crypto/clientreference/TestClientToken has been
> compiled by a more recent version of the Java Runtime (class file version
> 53.0), this version of the Java Runtime only recognizes class f
> ile versions up to 52.0
> [ERROR] at java.lang.ClassLoader.defineClass1(Native Method)
> [ERROR] at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
> [ERROR] at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
> [ERROR] at
> java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
> [ERROR] at
> java.net.URLClassLoader.access$100(URLClassLoader.java:74)
> [ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
> [ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
> [ERROR] at java.security.AccessController.doPrivileged(Native
> Method)
> [ERROR] at
> java.net.URLClassLoader.findClass(URLClassLoader.java:362)
> [ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
> [ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
> [ERROR] at
>
> org.apache.maven.surefire.booter.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:100)
> [ERROR] at
>
> org.apache.maven.surefire.api.util.DefaultScanResult.loadClass(DefaultScanResult.java:136)
> [ERROR] at
>
> org.apache.maven.surefire.api.util.DefaultScanResult.applyFilter(DefaultScanResult.java:100)
> [ERROR] at
>
> org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:147)
> [ERROR] at
>
> org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:128)
> [ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> [ERROR] at
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> [ERROR] at
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> [ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
> [ERROR] at
>
> org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:167)
> [ERROR] at
>
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:161)
> [ERROR] at
>
> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:84)
> [ERROR] at
>
> org.apache.maven.plugin.surefire.InPluginVMSurefireStarter.runSuitesInProcess(InPluginVMSurefireStarter.java:87)
> [ERROR] ... 16 more
>
> I don't like guessing what is going on here, but i'm not in a position to
> go that extra mile and "Run Maven with -Dmaven.surefire.debug, and attach
> to the running process with a debugger."
>
> In a nutshell my question is "how can I build with a JDK 9 or above using a
> toolchain and without being limited to a single test fork?"
>
> Thanks,
> Delany
>
--
Thomas Broyer
/tɔ.ma.bʁwa.je/ <http://xn--nna.ma.xn--bwa-xxb.je/>