Подтвердить что ты не робот

Spring boot war без встроенного tomcat

Я хочу создать военный файл без встроенного tomcat с maven. Здесь соответствующая часть моего 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, но не могу найти, что неправильно.

Я знаю, что основная идея заключается в том, чтобы запускать его как приложение, как всегда наш клиент хочет развернуть его на своем сервере приложений.

4b9b3361

Ответ 1

Следуя подсказке от М. Дейнума, я исключил зависимость от tomcat.

Со следующим pom.xml(соответствующим фрагментом) a 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>
...

Ответ 2

Я не уверен, что этот способ spring -boot делает это, но вы можете исключить банки tomcat, используя конфигурацию maven-war-plugin. То есть добавьте следующее к вашему 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>

Используя этот подход, созданная война не является исполняемой (ее нельзя запускать в командной строке с использованием java -jar), но ее можно развернуть только в любой контейнер сервлета

Ответ 3

У меня была такая же потребность, но удаление указанной зависимости не сработало. Я смог получить файл WAR, добавив эту зависимость <packaging>war</packaging> к моему файлу pom.

Я использовал эту Spring статью в качестве руководства..., так что это может помочь и другим людям.