【问题标题】:Removing embedded tomcat server from war file when deploying to JBOSS [Spring-Boot]部署到 JBOSS [Spring-Boot] 时从 war 文件中删除嵌入式 tomcat 服务器
【发布时间】:2017-04-07 19:45:40
【问题描述】:

我正在使用 intellij,而不是手动从 war 文件中删除 tomcat jar,在编译期间删除它们的更好方法是什么。

我需要这样做,因为我收到以下错误:

failure description: {"WFLYCTL0080: Failed services" =>    
{"jboss.undertow.deployment.default-server.default-host.\"/request-ws-
0.0.1-SNAPSHOT\"" => "org.jboss.msc.service.StartException in service 
jboss.undertow.deployment.default-server.default-host.\"/request-ws-
0.0.1-SNAPSHOT\": java.lang.RuntimeException: 
java.lang.ClassCastException: 
org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to 
io.undertow.websockets.jsr.ServerWebSocketContainer

但是,当我删除 tomcat jar 时,一切都很好。

我正在使用 Gradle,当我使用 JBOSS 运行它时,我想删除它。但是,当我使用 spring-boot 运行它时,我想要/需要它。

【问题讨论】:

    标签: spring-boot jboss


    【解决方案1】:

    如果您使用 maven,那么您需要在 pom.xml 中将 tomcat 依赖范围设置为 provided,如 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging 中所述

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!-- ... -->
        <packaging>war</packaging>
        <!-- ... -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
            <!-- ... -->
        </dependencies>
    </project>
    

    Gradle 用户应使用providedRuntime,如http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html 中所述。

    ...
    apply plugin: 'war'
    
    war {
        baseName = 'myapp'
        version =  '0.5.0'
    }
    
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/libs-snapshot" }
    }
    
    dependencies {
        compile("org.springframework.boot:spring-boot-starter-web")
        providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
        ...
    }
    

    【讨论】:

    • 我正在使用 Gradle,我想删除它,我确实有上述依赖项。但是,当我在 BOSS 上运行它时,我不希望它出现在 war 文件中,但是当我使用 spring-boot 运行它时,我会这样做。
    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 2015-03-10
    • 2018-12-05
    • 2018-07-25
    • 2018-05-18
    • 2015-09-03
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多