Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[tycho-user] Tycho 2.1.0 cannot run tests with Java 1.8 anymore. Bug?

Hi,

I am currently updating from Tycho 2.0.0 to 2.1.0. Well, actually I want
to update to 2.3.0 but the build breaks somewhere between 2.0.0 and 2.1.0.

I use toolchains to build my plug-in against different Eclipse versions,
ranging all from Eclipse Luna to Eclipse 2021-03. My own
Bundle-RequiredExecutionEnvironment is always JavaSE-1.8,
maven.compiler.source|target are 1.8, and I even use the
maven-enforcer-plugin's <enforceBytecodeVersion> rule to check that my
own JAR doesn't contain any bytecode that won't run on a Java 1.8 JRE.

Unfortunately, tests that ran previously just fine with Java 1.8 in a
target platform based on Eclipse 2020-06 (the last Eclipse still
supporting Java 1.8) now fail with this error message:

> org.apache.maven.surefire.util.SurefireReflectionException: java.lang.ClassNotFoundException: org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
> 	at org.apache.maven.surefire.util.ReflectionUtils.loadClass(ReflectionUtils.java:249)
> 	at org.apache.maven.surefire.util.ReflectionUtils.instantiateOneArg(ReflectionUtils.java:133)
> 	at org.apache.maven.surefire.booter.SurefireReflector.instantiateProvider(SurefireReflector.java:265)
> 	at org.apache.maven.surefire.booter.ProviderFactory.createProvider(ProviderFactory.java:118)
> 	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:83)
> 	at org.eclipse.tycho.surefire.osgibooter.OsgiSurefireBooter.run(OsgiSurefireBooter.java:114)
> 	at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication$1.run(AbstractUITestApplication.java:35)
> 	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
> 	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
> 	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4928)
> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4449)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1158)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1047)
> 	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
> 	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:658)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
> 	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557)
> 	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:154)
> 	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150)
> 	at org.eclipse.tycho.surefire.osgibooter.UITestApplication.runApplication(UITestApplication.java:27)
> 	at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication.run(AbstractUITestApplication.java:120)
> 	at org.eclipse.tycho.surefire.osgibooter.UITestApplication.start(UITestApplication.java:33)
> 	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:498)
> 	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
> 	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
> 	at org.eclipse.equinox.launcher.Main.run(Main.java:1447)
> 	at org.eclipse.equinox.launcher.Main.main(Main.java:1420)
> Caused by: java.lang.ClassNotFoundException: org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
> 	at org.eclipse.tycho.surefire.osgibooter.CombinedClassLoader.findClass(CombinedClassLoader.java:37)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
> 	at org.apache.maven.surefire.util.ReflectionUtils.loadClass(ReflectionUtils.java:241)
> 	... 35 more

I suspect that the root cause is a class file with major verison 55 (aka
Java 11) which cannot be loaded by the forked Java 1.8 JVM used to run
the tests:

[INFO] --- tycho-surefire-plugin:2.1.0:test (default-test) @
com.teamscale.ide.eclipse.tests ---
[INFO] Toolchain in tycho-surefire-plugin: JDK[/usr/lib/jvm/zulu-8-amd64]

I know that Tycho 2.1.0 itself requires Java 11, but would have hoped
that this does not apply to its test runtime, as sanity checking your
plugin against less modern target platforms seems to be a valid use case.

Now, as far as I can see, the
org.eclipse.tycho:org.eclipse.tycho.surefire.junit5:2.1.0 artifact
containing org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
only contains Java 1.8 compatible classes:

javap/grep/sort/uniq magic:
>       2   major version: 49
>      18   major version: 50
>     220   major version: 52

Likewise for org.eclipse.tycho.surefire.osgibooter-2.1.0.jar:
>      12   major version: 49

So I suspect there are some other "test runtime" classes not compatible
with Java 1.8. (BTW, the JUnit version itself, 5.6.0, is that same as
before the Tycho update and compatible with Java 1.8.)

Any ideas?

IMHO, it should still be possible to use Tycho 2.1.0 or later to execute
tests with Java 1.8, even if the rest of Tycho requires Java 11.

Best wishes,

Andreas Sewe

-- 
Dr. Andreas Sewe | sewe@xxxxxxx | +49 152 56342856
CQSE GmbH | Centa-Hafenbraedl-Strasse 59 | 81249 Muenchen | www.cqse.eu
Amtsgericht Muenchen | HRB 177678 | GF: F. Deissenboeck, M. Feilkas

Attachment: signature.asc
Description: OpenPGP digital signature


Back to the top