java - 上下文 c.g.g.d.s.j.WebAppContextWithReload 启动失败

标签 java log4j2 embedded-jetty

我需要帮助解决一个我不知道如何解决的问题。我们将非常感谢您的帮助。

我刚刚将 log4j2 jar(log4j-api-2.10.0.jar、log4j-core-2.10.0.jar)添加到我的 Web 应用程序中,它开始在我的开发中遇到这个问题。后来我添加了log4j-web-2.10.0.jar并尝试,它仍然失败并显示相同的消息。

这是我的环境:

IDE: Eclipse Oxygen2
JDK: 1.8.0_162
Jetty (embedded in Eclipse): jetty-9.2.z-SNAPSHOT
OS: Win 10 (64bit)
Framework: GWT 2.8.2

堆栈跟踪(部分):

[WARN] Failed startup of context c.g.g.d.s.j.WebAppContextWithReload@3a24f397{/,file:<project_path>/war/,STARTING}{<project_path>\war}
MultiException[java.lang.RuntimeException: Error scanning entry META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class from jar file:<project_path>/war/WEB-INF/lib/log4j-api-2.10.0.jar, java.lang.RuntimeException: Error scanning entry META-INF/versions/9/org/apache/logging/log4j/util/StackLocator.class from jar file:<project_path>/war/WEB-INF/lib/log4j-api-2.10.0.jar, java.lang.RuntimeException: Error scanning entry module-info.class from jar file:<project_path>/war/WEB-INF/lib/log4j-api-2.10.0.jar]
    at org.eclipse.jetty.annotations.AnnotationConfiguration.scanForAnnotations(AnnotationConfiguration.java:536)
    at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:447)
    at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:479)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1337)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
    .
    .
    .
Caused by: MultiException[java.lang.RuntimeException: Error scanning entry META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class from jar file:<project_path>/WEB-INF/lib/log4j-api-2.10.0.jar, java.lang.RuntimeException: Error scanning entry META-INF/versions/9/org/apache/logging/log4j/util/StackLocator.class from jar file:<project_path>/WEB-INF/lib/log4j-api-2.10.0.jar, java.lang.RuntimeException: Error scanning entry module-info.class from jar file:<project_path>/WEB-INF/lib/log4j-api-2.10.0.jar]
    at org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:899)
    at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:831)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:163)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:548)

最佳答案

复制自 https://github.com/eclipse/jetty.project/issues/2192 ,(进行了额外的编辑)

这与您使用JEP-238 Multi-Release JAR有关.

注意路径..

META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class

META-INF/versions/<java.specification.version>/*路径前缀告诉您该路径下面的类适用于该特定版本的 Java,可能会替换顶级 JAR 中的相同命名的类。

Issue #1797这是首次报告并修复此问题的地方。

已修复...

  • jetty-9.3.22.v20171030 - 2017 年 10 月 30 日
  • jetty-9.4.8.v20171121 - 2017 年 11 月 21 日

由于 Jetty 9.2.x 已结束生命周期,因此 Jetty 9.2.x 上将不再支持 JEP-238。

您的选择是升级到上面列出的受支持版本之一,或者将 log4j 版本降级到不使用 JEP-238 多版本 JAR 文件的版本。

还值得注意的是,您使用的 log4j JEP-238 Multi-Release JAR 文件也是 Java 9 JPMS 模块。

存在module-info.class表明。

Jetty 支持在字节码扫描期间忽略 module-info.class 已在 Issue #1692 中修复

关于java - 上下文 c.g.g.d.s.j.WebAppContextWithReload 启动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716306/

相关文章:

java - 如何在运行时选择 log4j2 Appender

java - Jetty Maven 在不同端口上插入多个 Web 应用程序

java - 针对一个 Web 容器的 jar 构建 Java 程序并将其部署到另一个容器中的含义

java - 带有单页应用程序的嵌入式 jetty

java - java中的synchronized block 是否真的获取整个对象锁?

java - 获取特定 log4j 函数的类、方法、行号信息的方法

java - 使用 tomcat 上下文变量配置 log4j2

java - 在 Hibernate 中同时使用@Column 和@Formula

java - JAXB 绑定(bind)文件中的 XPath 评估导致目标节点为空

java - 仅在子类不良实践中使用的父类(super class) protected 字段是吗?