没有tomcat嵌入式的spring boot war

时间:2014-09-23 09:40:40

标签: spring maven war spring-boot

我想创建一个没有嵌入式tomcat和maven的war文件。 这是我的pom的相关部分

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.6.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- Add tomcat only if I want to run directly -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
...

如果我运行mvn包,我会得到一个战争,其中tomcat * .jar位于提供的lib文件夹中,但仍然在lib文件夹中。我看过build-tool-plugins-maven-packaging,但无法找到错误。

我知道一个主要的想法是将其作为一个应用程序运行,我们的客户希望将其部署在他的应用程序服务器上。

5 个答案:

答案 0 :(得分:24)

根据M. Deinum的提示,我排除了tomcat-depedency。

使用以下pom.xml(相关代码段),maven clean package会得到我想要的结果。

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.6.RELEASE</version>
</parent>
<dependencies>
    <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>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- Add tomcat only if I want to run directly -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
...

构思用户警告:您必须在运行配置中激活“包含所提供范围的依赖项”(请参阅​​Unable to start spring-boot application in IntelliJ Idea for more information

答案 1 :(得分:8)

我不确定这是否采用弹簧启动方式,但您可以使用maven-war-plugin配置排除tomcat jar。也就是说,将以下内容添加到您的pom.xml中:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <packagingExcludes>WEB-INF/lib/tomcat-*.jar</packagingExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

使用这种方法,生成的war不可执行(不能使用java -jar在命令行上运行),但只能部署到任何servlet容器

答案 2 :(得分:5)

我有同样的需求,但删除所提到的依赖并没有奏效。我通过将这个<packaging>war</packaging>依赖项添加到我的pom文件中来获取WAR文件。

我使用这篇Spring文章作为指南...分享,这也可以帮助其他人。

答案 3 :(得分:3)

更改spring-boot-starter依赖项
   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

对于这个将排除嵌入式tomcat服务器。

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

答案 4 :(得分:1)

我认为,从现有的没有嵌入式Tomcat的Spring Boot项目构建最终WAR的最简单方法是:

1)为您的工件设置WARpackaging:<packaging>war</packaging>

2)设置Tomcat Server依赖项以提供:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

如果您现有的某些Spring Boot依赖项默认包含它,只需排除它即可。示例:

<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>

就是这样。