web-dev-qa-db-fra.com

Spring Boot - pom parent lorsque vous avez déjà un pom parent

Existe-t-il une approche spécifique recommandée pour l'inclusion du pom parent print-boot dans les projets qui ont déjà un POM parent requis?

Que recommandez-vous pour les projets qui doivent s’étendre d’un parent organisationnel (c’est extrêmement courant et même un grand nombre de projets publiés dans la plupart des projets publiés dans Maven central, en fonction de la base de mise en pension dont ils proviennent). La plupart des éléments de construction sont liés à la création de fichiers JAR exécutables (par exemple, l'exécution de Tomcat/Jetty intégré). Il existe des moyens de structurer les choses pour que vous puissiez obtenir toutes les dépendances sans sortir d'un parent (similaire à la composition vs l'héritage). Vous ne pouvez pas obtenir un truc de construction de cette façon cependant.

Il est donc préférable d’inclure tout le pom parent spring-boot dans le POM parent requis ou d’avoir simplement une dépendance POM dans le fichier POM du projet.

Autres options?

TIA,

Scott

158
Scott C.

Vous pouvez utiliser le printemps-boot-starter-parent comme un "bom" (cf Spring et Jersey autres projets prenant en charge cette fonctionnalité maintenant) et incluez-la uniquement dans la section de gestion des dépendances avec scope = import.Comme vous bénéficiez de nombreux avantages de son utilisation (gestion des dépendances) sans remplacer les paramètres de votre parent actuel.

Les 2 autres principales choses qu'il fait sont

  1. définir une charge de propriétés pour définir rapidement les versions des dépendances que vous souhaitez remplacer
  2. configure certains plugins avec une configuration par défaut (principalement le plugin Spring Boot maven). Ce sont donc les choses que vous devrez faire manuellement si vous utilisez votre propre parent.

Exemple fourni dans documentation Spring Boot :

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
158
Dave Syer

Mettre à jour 2018-01-04 avec 1.5.9.RELEASE.

J'ai le code complet et exemple exécutable ici (https://www.surasint.com/spring-boot-with-no-parent-example/

Vous avez besoin de cela comme base

   <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springframework.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Mais cela ne suffit pas, vous devez également définir explicitement l'objectif de spring-boot-maven-plugin (si vous utilisez Spring Boot en tant que parent, vous n'avez pas à le définir explicitement).

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${springframework.boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

Sinon, vous ne pouvez pas créer de jarre ou de guerre exécutable.

Pas encore, si vous utilisez JSP, vous devez avoir ceci:

<properties>    
  <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

Sinon, vous obtiendrez ce message d'erreur:

    [ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project spring-boot-09: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executi
ng in update mode) -> [Help 1]

NON NON, cela ne suffit toujours pas si vous utilisez le filtre de profil et de ressources Maven avec Spring Boot avec "@" au lieu de "$ {}" (comme dans cet exemple https://www.surasint.com/spring -boot-maven-resource-filter / ). Ensuite, vous devez explicitement ajouter ceci dans

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

Et ceci dans

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <delimiters>
                    <delimiter>@</delimiter>
                </delimiters>
                <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
        </plugin>

Voir l'exemple dans le lien https://www.surasint.com/spring-boot-with-no-parent-example/ .

34
Surasin Tancharoen