Jetty启动报Error scanning entry META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class...

近日在项目中集成Elasticsearch后,Jetty启动报错。

错误日志如下:

Suppressed: 
        |java.lang.RuntimeException: Error scanning entry META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class from jar file:///data/program/capital/cloud/work/jetty-0.0.0.0-16201-capital-cloud.war-_capital-cloud-any-/webapp/WEB-INF/lib/log4j-api-2.11.1.jar
        |       at org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:891)
        |       at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:837)
        |       at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:159)
        |       at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:462)
        |       at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
        |       at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591)
        |       at java.lang.Thread.run(Thread.java:748)
        |Caused by: 
        |java.lang.IllegalArgumentException
        |       at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        |       at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        |       at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        |       at org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:959)
        |       at org.eclipse.jetty.annotations.AnnotationParser.parseJarEntry(AnnotationParser.java:940)
        |       at org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:887)
        |       at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:837)
        |       at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:159)
        |       at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:462)
        |       at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
        |       at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591)
        |       at java.lang.Thread.run(Thread.java:748)
Caused by: 
java.lang.RuntimeException: Error scanning entry META-INF/versions/9/module-info.class from jar file:///data/program/capital/cloud/work/jetty-0.0.0.0-16201-capital-cloud.war-_capital-cloud-any-/webapp/WEB-INF/lib/log4j-api-2.11.1.jar
        at org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:891)
        at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:837)
        at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:159)
        at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:462)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591)
        at java.lang.Thread.run(Thread.java:748)
Caused by: 
java.lang.IllegalArgumentException
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:959)
        at org.eclipse.jetty.annotations.AnnotationParser.parseJarEntry(AnnotationParser.java:940)
        at org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:887)
        at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:837)
        at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:159)
        at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:462)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591)
        at java.lang.Thread.run(Thread.java:748)

于是翻江倒海的四处查解决方案,有的说把jar包里面的version删掉再重新打包更改版本号,试过不起作用。

后来又找历史发布公告,发现是jetty版本不兼容引起的,升级到jetty-9.4.8.v20171121即可完美解决问题。

查找的一些资源网站:

1. http://cache.baiducontent.com/c?m=9d78d513d99401ef05ad837e7c5786354508db3f69c0d0642888d508d8735b301831a5e830236013d3b36b6671f41508fdf04736604361ecc694c95dddca993f2ff97a74250b863041914afe911132c151ce07bcfa42bbefe732e2f08f86d90c478d135b75dab6cd184103cb1ced0970a5f5c811481b47fab96e38ba4e775ece7e1fab04beb773285cdcaa9c414ac92fd3651095ab28e46d49eb44f2081b5205e61f&p=882a970ac5904ead07f58c6611&newp=8c769a479d9718ff57ef82231653d8304a02c70e3ac3864e1290c408d23f061d4862e7b12525170ed0c37b6307a94c56e1f5327123454df6cc8a871d81edd97c76&user=baidu&fm=sc&query=Error+scanning+entry+META-INF/versions/9/org/apache/logging/log4j&qid=a4ae72860018d6f8&p1=2

2. https://blog.csdn.net/baidu_34036884/article/details/80151963

3. 关于jdk9的兼容问题:

  https://github.com/eclipse/jetty.project/issues/1797

  https://github.com/eclipse/jetty.project/pull/1801

4. 历史版本发布记录:

  https://www.eclipse.org/lists/jetty-announce/2017/Nov/index.php

  9.4.7针对jdk9开始兼容:https://www.eclipse.org/lists/jetty-announce/msg00111.html

  9.4.8针对jdk9兼容优化:https://www.eclipse.org/lists/jetty-announce/msg00114.html

5. Jetty文档:

  https://www.eclipse.org/jetty/documentation/9.3.27.v20190418/

6. Jetty历史服务下载地址

  https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/