27

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)
Naman
  • 27,789
  • 26
  • 218
  • 353
Puliyur ranganath
  • 395
  • 1
  • 4
  • 8

1 Answers1

27

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:

Joakim Erdfelt
  • 46,896
  • 7
  • 86
  • 136
  • Could you say when jetty will support JDK 9? – Pavel_K Dec 10 '17 at 12:13
  • 1
    @Pavel_K - The answer was already updated to say this, but the answer is Jetty 9.4.x supports JDK 9. Further, it doesn't actually matter if you're using JDK 9 - I'm using JDK 8 but still having the issue, because some of the jars I'm pulling in are built against JDK 9. – ArtOfWarfare Jun 17 '19 at 18:05
  • we are facing this issue. the verbose log is "Error scanning entry META-INF/versions/9/module-info.class" from jar file:///privare/var/folders/8n/x2m8yc21/xxx, the jetty version is 9.4.6. seen from @Joakim's answer, we need to upgrade to 9.4.9 + – lawrence Jan 16 '20 at 09:26
  • @lawrence be aware of security reports - https://www.eclipse.org/jetty/security-reports.html and what versions are available now - https://www.eclipse.org/jetty/documentation/current/what-jetty-version.html – Joakim Erdfelt Jan 16 '20 at 10:43
  • I had this issue .Running the application from embedded jetty for 9.2.1 didn't gave any errors, but the standalone jetty was giving this error. I am using JDK 8 as well. Do you know how that happens – Abhi Mar 03 '21 at 06:44
  • 1
    @Abhi Simple explanation, embedded Jetty does not perform bytecode scanning unless you have added the specific configurations for it to. Standalone always does bytecode scanning. – Joakim Erdfelt Mar 03 '21 at 11:49