【发布时间】:2021-04-26 13:44:26
【问题描述】:
我正在尝试将我的项目更新到 Java 11 - OpenJDK_11.0.2(目前在 Java 8 上)。我正在使用 runjettyrun 和 Jetty 版本 9.4.8.v20171121。
我可以在 Java 8 上毫无问题地运行该项目,但如果我切换到 Java 11,我将收到以下错误消息:
MultiException[java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../entities/InventoryItemWithEnum.class, java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../entities/NeededItem.class, java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../entities/InventorySnapshot.class, java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../entities/InventoryItemAmount.class, java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../entities/TransferOrders.class, java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../entities/ItemSets.class, java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../entities/SearchSerialnumberView.class]
| at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:717)
| at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:832)
| at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:161)
| at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:468)
| at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
| at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
| at java.base/java.lang.Thread.run(Thread.java:834)
|Suppressed:
| |java.lang.RuntimeException: Error scanning file /Users/.../target/classes/.../enumerations/Location.class
| | at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:746)
| | at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:832)
| | at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:161)
| | at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:468)
| | at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
| | at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
| | at java.base/java.lang.Thread.run(Thread.java:834)
| |Caused by:
| |java.lang.IllegalArgumentException
| | at org.objectweb.asm.ClassReader.<init>(ClassReader.java:160)
| | at org.objectweb.asm.ClassReader.<init>(ClassReader.java:143)
| | at org.objectweb.asm.ClassReader.<init>(ClassReader.java:418)
| | at org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:933)
| | at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:740)
| | at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:832)
| | at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:161)
| | at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:468)
| | at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
| | at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
| | at java.base/java.lang.Thread.run(Thread.java:834)
【问题讨论】:
-
根本原因是旧版本的
asm能够扫描较新的类 -
它不仅仅是
asm,它也是较旧的 Jetty 实现,它不包含要扫描的 JAR 中的更新排除内容列表(Java 9 / JEP-238 带来的内容) )。
标签: java jetty java-11 java-platform-module-system