Hello, when attempting to move our existing code base from Java 8 to Java 11, we noticed exceptions appearing in the Karaf log in our automated tests (using Pax Exam).
I've made a minimal test project available on github show-casing the issue: https://github.com/elilja/java-11-runtime-issue Make sure JAVA_HOME is set to Java 11 JDK and simply execute "mvn clean test" (we're using Maven 3.6.3 by the way) maven.compiler.source/target for this project is currently set java 11 target, but can be set to java 8, and the issue will still appear if using a Java 11 runtime. The karaf log can be found under the target folder, where the karaf distribution is unpacked, and the exception looks like this: $ cat target/38ed3633-4936-4894-9334-0d1849833602/data/log/karaf.log aug. 13, 2020 5:36:48 EM org.apache.karaf.main.Main launch INFO: Installing and starting initial bundles aug. 13, 2020 5:36:49 EM org.apache.karaf.main.Main launch INFO: All initial bundles installed and set to start aug. 13, 2020 5:36:49 EM org.apache.karaf.main.lock.SimpleFileLock lock INFO: Trying to lock C:\projects\java-11-runtime-issue\target\38ed3633-4936-4894-9334-0d1849833602\lock aug. 13, 2020 5:36:49 EM org.apache.karaf.main.lock.SimpleFileLock lock INFO: Lock acquired aug. 13, 2020 5:36:49 EM org.apache.karaf.main.Main$KarafLockCallback lockAcquired INFO: Lock acquired. Setting startlevel to 100 2020-08-13T17:36:53,355 | ERROR | features-3-thread-1 | Felix | 5 - org.ops4j.pax.logging.pax-logging-api - 1.11.6 | Bundle org.apache.felix.framework [0] EventDispatcher: Error during dispatch. (java.lang.NoClassDefFoundError: org/apache/karaf/specs/locator/OsgiLocator) java.lang.NoClassDefFoundError: org/apache/karaf/specs/locator/OsgiLocator at org.apache.karaf.specs.activator.Activator.register(Activator.java:124) ~[org.apache.karaf.specs.activator-4.2.9.jar:4.2.9] at org.apache.karaf.specs.activator.Activator.bundleChanged(Activator.java:96) ~[org.apache.karaf.specs.activator-4.2.9.jar:4.2.9] at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) ~[org.apache.felix.framework-5.6.12.jar:?] at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [org.apache.felix.framework-5.6.12.jar:?] at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [org.apache.felix.framework-5.6.12.jar:?] at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579) [org.apache.felix.framework-5.6.12.jar:?] at org.apache.felix.framework.StatefulResolver.fireResolvedEvents(StatefulResolver.java:1286) [org.apache.felix.framework-5.6.12.jar:?] at org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:512) [org.apache.felix.framework-5.6.12.jar:?] at org.apache.felix.framework.Felix.resolveBundles(Felix.java:4108) [org.apache.felix.framework-5.6.12.jar:?] at org.apache.felix.framework.FrameworkWiringImpl.resolveBundles(FrameworkWiringImpl.java:133) [org.apache.felix.framework-5.6.12.jar:?] at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.resolveBundles(BundleInstallSupportImpl.java:244) [!/:?] at org.apache.karaf.features.internal.service.FeaturesServiceImpl.resolveBundles(FeaturesServiceImpl.java:1168) [!/:?] at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1022) [!/:?] at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1062) [!/:?] at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:998) [!/:?] at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?] at java.lang.Thread.run(Thread.java:834) [?:?] 2020-08-13T17:36:53,377 | ERROR | FelixDispatchQueue | FrameworkEvent | 0 - org.apache.felix.framework - 5.6.12 | FrameworkEvent ERROR This exception trace appears several times in the log. It seems to be finding an incompatible definition of the OsgiLocator class. If I switch back to Java 8, the exception disappears, everything looks fine I get the same behavior both under Linux and Windows. On Windows, Oracle JDK 11.0.8 was used, on Linux OpenJDK 11.0.8 was used. No difference in behavior. It happens with older Karaf 4.2.x-versions as well, and I've seen reports of this problem on other lists going back to last autumn. With no resolution. As a side note, we also noticed this reflective access warning, which I guess is not related since it's just a warning, but I felt I should share it nonetheless: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender (file:/C:/projects/java-11-runtime-issue/target/38ed3633-4936-4894-9334-0d1849833602/system/org/apache/felix/org.apache.felix.framework/5.6.12/org.apache.felix.framework-5.6.12.jar) to method java.net.URLClassLoader.addURL(java.net.URL) WARNING: Please consider reporting this to the maintainers of org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release This warning appears in the test log (the console log) and not the karaf log itself and I guess a fix is needed in the Felix framework is needed to get rid of it, but it worries me to see the felix framework hasn't made a release for 16 months... I'm hoping for a fix for this issue for the upcoming Karaf 4.2.10 (but, yes, I am only speculating here the problem lies in Karaf or one of its dependencies)! - Eric L