generate compile application spring maven war spring-boot

spring - compile - guerra de arranque de primavera sin tomcat incrustado



spring boot war gradle (3)

Quiero crear un archivo war sin incorporar tomcat con maven. Aquí la parte relevante de mi 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> ...

Sin embargo, si ejecuto el paquete mvn, me sale una guerra, donde el tomcat * .jar está en una carpeta proporcionada-lib pero todavía está en la carpeta lib. Leo build-tool-plugins-maven-packaging , pero no puedo encontrar lo que está mal.

Sé que una idea principal es ejecutarla como una aplicación, independientemente de si el cliente desea desplegarla en su servidor de aplicaciones.


Tenía la misma necesidad pero eliminar la dependencia mencionada no funcionó. Pude obtener el archivo WAR agregando esta dependencia <packaging>war</packaging> a mi archivo pom.

Utilicé este artículo de Spring como guía ... compartiendo para que esto pueda ayudar a otras personas también.


Siguiendo la sugerencia de M. Deinum, excluí la dependencia del tomcat.

Con el siguiente pom.xml (fragmento relevante) un maven clean package tiene el resultado que quiero obtener.

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


No estoy seguro de si esa es la manera de hacerlo, pero puedes excluir los tarros de tomcat usando la configuración de maven-war-plugin . Es decir, agregue lo siguiente a su 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>

Al usar este enfoque, la guerra generada no es ejecutable (no se puede ejecutar en línea de comandos usando java -jar) pero solo se puede implementar en cualquier contenedor de servlets