首页 > 解决方案 > 在 Wildfly 中重新部署战争时出现 ClassCastingException

问题描述

我总是在重新部署我的网络应用程序的新版本时遇到错误。

我必须取消部署并重新启动服务器才能使其正常工作。

如果我不重新启动服务器,我会在部署过程中收到此消息:

org.apache.logging.log4j.core.LoggerContext 不能转换为 org.apache.logging.log4j.core.LoggerContext

我运行一个 Springboot 应用程序作为后端和 Angular 作为前端。

这是我的 Maven 依赖项:

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.4.4</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>*</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>*</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>*</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-websocket</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
        <version>2.4.4</version>
    </dependency>

标签: javaspring-bootlog4jwildflyclasscastexception

解决方案


发生这种情况是因为 WildFly 上已经存在(隐式)log4j API 依赖项。您可以将 WildFly 配置为不添加它自己的 API 日志记录依赖项。

A) 从WildFly 控制台:配置 -> 子系统 -> 日志记录配置

将“添加日志记录 API 依赖项”更改为false

B)通过编辑standalone.xml

<subsystem xmlns="urn:jboss:domain:logging:8.0">
   <add-logging-api-dependencies value="false"/>

C) 或者,如果您有jboss-deployment-structure.xml

<deployment>
    <exclude-subsystems>
      <subsystem name="logging"/>
    </exclude-subsystems>
  </deployment>

PS这为我修复了与您相同的技术堆栈

jboss doc 关于 logging-api-dependencies


推荐阅读