我在尝试使用 Docker 将 .war 文件从 Nexus 部署到 Wildfly 时遇到错误。
错误信息是:
10:13:56,319 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "file.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"file.war\".component.\"javax.servlet.http.HttpServlet$NoBodyAsyncContextListener\".WeldInstantiator" => "Failed to start service
Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error while loading class javax.servlet.http.HttpServlet$NoBodyAsyncContextListener
Caused by: java.lang.IncompatibleClassChangeError: javax.servlet.http.HttpServlet and javax.servlet.http.HttpServlet$NoBodyAsyncContextListener disagree on InnerClasses attribute"}}
我已尝试以下故障排除步骤,但没有成功:
我当前在 pom.xml 中使用的版本是: Java版本11 瓦丁版本 23.0.1 Wildfly Maven 插件版本 4.0.0.Final
在我的 Dockerfile 中,我使用以下内容: JDK 11 野蝇 15.0.1.Final MSSQL_JDBC_VERSION 12.4.2.jre11
对于此类错误,您需要找到您的 Wildfly JavaEE 版本:
WildFly 15 支持 Java EE 8。这意味着它实现了 Java EE 8 中定义的规范,包括 Servlet 4.0、JPA 2.2、CDI 2.0、JSF 2.3 等。
那就依靠
<!-- https://mvnrepository.com/artifact/javax/javaee-api -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0</version>
<scope>provided</scope>
</dependency>
这就是大多数情况下您所需要的。
并在您的类中使用 JavaEE API。然后不匹配错误就会消失。