我在 Wildfly 启动过程中收到错误,并显示以下消息:
NoSuchFieldError:EMPTY_BYTE_ARRAY
该消息还指出该错误发生在 undertow 部署中。有人可以告诉我这里发生了什么以及如何解决这个问题吗?
下面是堆栈跟踪的开头。
at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:90)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:829)
at [email protected]//org.jboss.threads.JBossThread.run(JBossThread.java:513)
引起:java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY 在deployment.taggable-server.war//org.apache.logging.log4j.core.config.ConfigurationSource。(ConfigurationSource.java:56) 在deployment.taggable-server.war//org.apache.logging.log4j.core.config.NullConfiguration。(NullConfiguration.java:32) 在deployment.taggable-server.war//org.apache.logging.log4j.core.LoggerContext。(LoggerContext.java:85) 在deployment.taggable-server.war//org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:254) 在deployment.taggable-server.war//org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:218) 在deployment.taggable-server.war//org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:136) 在deployment.taggable-server.war//org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:123) 在deployment.taggable-server.war//org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:117) 在deployment.taggable-server.war//org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:150) 在deployment.taggable-server.war//org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47) 在 [email protected] //org.apache.logging.log4j.LogManager.getContext(LogManager.java:196) 在 [email protected]//org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
我也遇到了同样的问题,你可以这样解决:
对于
war
:
里面有
jboss-deployment-structure.xml
src/main/webapp/WEB-INF/
,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.logging.log4j.api"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
对于
ear
:
里面有
jboss-deployment-structure.xml
src/main/application/META-INF/
,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<sub-deployment name="mywar.war">
<exclusions>
<module name="org.apache.logging.log4j.api"/>
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
您需要从部署中排除 API 模块。您的另一个选择是使用 WildFly 26,其中包含 2.16 版本的 API。
将log4j和log4j-api更新到2.16.0版本。
如果您使用的是 spring-boot,请在 pom.xml 中添加标签
<properties>
<log4j2-version>2.16.0</log4j2-version>
</properties>
和
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.16.0</version>
</dependency>
在 pom.xml 中
我通过将 log4j 版本更新到较低版本来修复此问题,并且它有效。 始终检查您是否有相同版本的工件(log4j-api 和 log4j-core)
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>