web-dev-qa-db-fra.com

guerre des bottes de printemps sans Tomcat intégré

Je veux créer un fichier de guerre sans Tomcat intégré avec maven. Voici la partie pertinente de mon 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>
...

Cependant, si j'exécute le package mvn, j'obtiens une guerre, où le Tomcat * .jar se trouve dans un dossier lib-fourni mais toujours dans le dossier lib. J'ai lu build-tool-plugins-maven-packaging , mais je ne trouve pas ce qui ne va pas.

Je sais qu'une idée principale est de l'exécuter en tant qu'application, quelle que soit la volonté de notre client de la déployer sur son serveur d'applications.

24
niels

Après l'indication de M. Deinum, j'ai exclu la dépendance de Tomcat.

Avec le pom.xml suivant (extrait de code correspondant), un maven clean package a le résultat que je ne veux pas obtenir.

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

Avertissement pour l'idée-utilisateur : Vous devez activer "Inclure les dépendances avec la portée fournie" dans la configuration d'exécution (voir Impossible de démarrer le printemps -boot application dans IntelliJ Idea pour plus d'informations )

27
niels

Je ne suis pas sûr que ce soit la méthode de démarrage au printemps, mais vous pouvez exclure les pots Tomcat en utilisant le maven-war-plugin configuration. Autrement dit, ajoutez ce qui suit à votre 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>

En utilisant cette approche, la guerre générée n'est pas exécutable (ne peut pas être exécutée en ligne de commande en utilisant Java -jar) mais ne peut être déployée que sur n'importe quel conteneur de servlet

8
Yonatan

J'avais ce même besoin, mais la suppression de la dépendance mentionnée n'a pas fonctionné. J'ai pu obtenir le fichier WAR en ajoutant ce <packaging>war</packaging> dépendance à mon fichier pom.

J'ai utilisé cet article Spring comme guide ... de partage afin que cela puisse aussi aider d'autres personnes.

5
Lopestt

Modification de la dépendance Spring-Boot-Starter de

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

Pour celui-ci, le serveur Tomcat intégré sera exclu.

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