【问题标题】:How do you deploy a spring boot application to an EAP server?如何将 Spring Boot 应用程序部署到 EAP 服务器?
【发布时间】:2019-01-31 06:15:11
【问题描述】:

我正在尝试将 Spring Boot 应用程序部署到 EAP 7 服务器。该应用程序使用 Spring Boot 的嵌入式 tomcat servlet 作为独立应用程序可以正常工作,但是当我尝试将其作为 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

从 jar 文件转换为 war 时,我已按照 spring-boot documentation 的建议完成。

具体来说,我已经声明了对 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> 

我还导入了 spring-boot-dependencies pom:

<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 覆盖扩展了我的应用程序类 protected SpringApplicationBuilder configure(SpringApplicationBuilder application)

我不明白为什么它不起作用,所以非常感谢任何帮助。

【问题讨论】:

  • 您收到的错误消息中只包含一行?你能从整个错误中看出为什么你对 StringManager 有依赖吗?
  • @Kenster 我添加了整个错误消息,尽管我之前的问题似乎是主要问题。
  • 异常似乎是 undertow 的失败。你试过没有undertow依赖吗?它看起来像另一个嵌入式容器,您不需要嵌入式容器,因为 jboss 提供了它。我们有几个部署到 EAP 6.4 的 spring-boot 大战,它们没有任何嵌入式容器。它们依赖于 s-b-starter-web 并排除 s-b-starter-tomcat。
  • @Kenster 感谢您的建议,不幸的是我刚刚尝试过,它仍然给出了同样的错误。奇怪的是,我有另一个项目是 eap 7 上的 spring-boot 并且工作正常。两者在配置方面甚至没有那么不同
  • 在我看来,spring boot 和 EAP.. yikes.. 为什么?

标签: spring-boot jboss-eap-7


【解决方案1】:

删除了 undertow 依赖,起初它不起作用,但后来我关闭了 eclipse 并重新打开它并且它起作用了。我真的不知道为什么它会起作用,但它确实起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2019-08-04
    • 2013-11-28
    • 2018-08-20
    • 2018-03-16
    • 2020-09-17
    • 2014-06-09
    相关资源
    最近更新 更多