Error logging into "module-info.class" log when starting Jetty server
I see this recently when I start my Java server. Has anyone else seen this? If so, what's the fix? I can confirm to the jar and the module-info.class is present in the respective 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)
source to share
module-info.class
is a Java9 feature (JPMS).
Jetty 9.4.9 (or newer) supports new JAR file changes since Java 9.
It doesn't matter which runtime JVM you are using (Oracle Java 8 or even something like OpenJDK 11.0.3), if you are using these JEP-238 Multi-Release Jar files in your WebApp (or server class loader) then you need to update Jetty version prior to Jetty 9.4.x.
This is due to the bytecode scan requirement introduced by Servlet 3.x. Jetty is required to scan all JAR files for possible servlet annotations or links that match yours . Once JEP-238 became a reality, this bytecode scanning layer had to be adapted / updated / patched 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. @HandlesTypes
Java 9 Feature Issues:
- https://github.com/eclipse/jetty.project/issues/1692 -
module-info.class
Bytecode scan excluded . - https://github.com/eclipse/jetty.project/issues/1797 - Correct support
META-INF/versions/*
for Multi-Release JAR files (JEP 238).
source to share