I'm seeing this recently when I start my java server. Has anyone else seen this? If so whats the fix? I can confirm the jar's and the module-info.class are present in the relevant paths.
MultiException[java.lang.RuntimeException: Error scanning entry module-info.class from jar
file:jetty/9.2.4.v20141103/tempDirectory/webapp/WEB-INF/lib/slf4j-api-1.8.0-alpha2.jar, java.lang.RuntimeException: Error scanning entry module-info.class from jar
file:jetty/9.2.4.v20141103/tempDirectory/webapp/WEB-INF/lib/log4j-over-slf4j-1.8.0-alpha2.jar, java.lang.RuntimeException: Error scanning entry module-info.class from jar
file:jetty/9.2.4.v20141103/tempDirectory/webapp/WEB-INF/lib/jcl-over-slf4j-1.8.0-alpha2.jar] at
org.eclipse.jetty.annotations.AnnotationConfiguration.scanForAnnotations(AnnotationConfiguration.java:535) at
org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:446) at
org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:473) at
org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1331) at
org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) at
org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499) at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at
org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41) at
org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186) at
org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498) at
org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146) at
org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180) at
org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64) at
org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:609) at
org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528) at
org.eclipse.jetty.util.Scanner.scan(Scanner.java:391) at
org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313) at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at
org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:150) at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at
org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:560) at
org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:235) at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at
org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) at
org.eclipse.jetty.server.Server.start(Server.java:387) at
org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) at
org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) at
org.eclipse.jetty.server.Server.doStart(Server.java:354) at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at
org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1255) at
java.security.AccessController.doPrivileged(Native Method) at
org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1174) 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:483) at
org.eclipse.jetty.start.Main.invokeMain(Main.java:323) at
org.eclipse.jetty.start.Main.start(Main.java:820) at
org.eclipse.jetty.start.Main.main(Main.java:112)
module-info.class
is a Java9 (JPMS) feature.
Jetty 9.4.9 (or newer) supports the new JAR file changes from Java 9.
It does not matter what Runtime JVM you are using (Oracle Java 8, or even something like OpenJDK 11.0.3), if you are using those JEP-238 Multi-Release Jar files in your WebApp (or Server classloader) then you are required to upgrade your Jetty version to Jetty 9.4.x.
This is because of the bytecode scanning requirement that Servlet 3.x introduces. Jetty is required to scan all JAR files for possible servlet annotations or references that match your webapp defined @HandlesTypes
. Once JEP-238 became a reality, this bytecode scanning layer had to be adapted/updated/fixed to support these new JAR file structures. Jetty 9.4.9 was the first version of Jetty to support these new JAR file structures during bytecode scanning.
Issues about Java 9 features:
module-info.class
from bytecode scanning.META-INF/versions/*
Multi-Release JAR files (JEP 238) properly.