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