Весенняя война без кота

Я хочу создать файл войны без встроенного кота с Maven. Здесь соответствующая часть моего пом

...
<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, но не могу найти, что не так.

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

4 ответа

Решение

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

Со следующим 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>
...

Предупреждение для idea-user: Вы должны активировать "Включить зависимости с предоставленной областью действия" в конфигурацию запуска (см. " Невозможно запустить приложение весенней загрузки в IntelliJ Idea" для получения дополнительной информации)

Я не уверен, является ли это пружинным способом сделать это, но вы можете исключить банки 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), но может быть развернута только в любом контейнере сервлета

Изменение зависимости весна-загрузка-стартер от

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

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

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

Я думаю, что самый простой способ создать финальную WAR из вашего существующего проекта Spring Boot без встроенного Tomcat - это следующий:

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>

Вот и все.

Другие вопросы по тегам