Я пытаюсь развернуть приложение весенней загрузки на сервере EAP 7.Приложение отлично работает как отдельное приложение, использующее встроенный сервлет tomcat, встроенный в Spring boot, но когда я пытаюсь развернуть его как WAR-файл в EAP 7, я получаю следующее исключение:
14:55:11,156 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 70) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host."projectName": org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host."projectName": java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager
at org.apache.tomcat.websocket.WsWebSocketContainer.<clinit>(WsWebSocketContainer.java:78)
at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)
at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:184)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.res.StringManager from [Module "deployment.projectName.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
... 12 more
14:55:11,156 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "projectName.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.undertow.deployment.default-server.default-host.\"projectName"" => "org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host.\"projectName": java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager
Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.res.StringManager from [Module \"deployment.projectName.war:main\" from Service Module Loader]"}}
14:55:11,187 INFO [org.jboss.as.server] (ServerService Thread Pool -- 37)
14:55:11,249 INFO [org.jboss.as.controller] (Controller Boot Thread) WFLYCTL0183: Service status report
WFLYCTL0186: Services which failed to start: service jboss.undertow.deployment.default-server.default-host."projectName": org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host."projectName": java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager
Я сделал как Spring-Boot документация рекомендует при конвертации из файла JAR в War.
В частности, я объявил зависимость от Spring-boot-Starter-Web, исключая tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Я также импортировал pom spring-boot-dependencies:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
Я также добавил зависимость к spring-boot-starter-undertow с областью действия:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
<scope>provided</scope>
</dependency>
Я удалил spring-boot-maven-plugin
и расширил свой класс приложений с помощью SpringBootServletInitializer
overriding protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
Я не понимаю, почему он не работает, поэтому любая помощь будет принята с благодарностью.