web-dev-qa-db-fra.com

Module Maven utilisant Spring-Boot

J'aime configurer mes applications dans maven en créant des modules comme;

<groupId>com.app</groupId>
<artifactId>example-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>app-api</module>
    <module>app-impl</module>
    <module>app-web</module>
</modules>

Les modules utilisent ensuite "l'exemple d'application" comme parent.

Maintenant, je veux utiliser 'spring-boot' pour mon application web.

Existe-t-il un moyen de configurer maven pour que mon "app-web" soit une application Spring-Boot?

Le problème auquel je suis confronté est que vous devez utiliser Spring-Boot en tant que parent.

33
heldt

Vous n'avez pas besoin d'utiliser le parent de démarrage de printemps, c'est juste un moyen de démarrer rapidement. Il ne propose que la gestion des dépendances et la gestion des plugins. Vous pouvez faire les deux vous-même, et vous pouvez utiliser les dépendances de démarrage de ressort (ou de manière équivalente le parent) pour gérer les dépendances si vous voulez un pas à mi-chemin. Pour ce faire, utilisez scope=import comme ceci

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <type>pom</type>
            <version>1.0.2.RELEASE</version>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
55
Dave Syer

Une autre alternative, est d'inclure dans le pom parent, la déclaration parent pour le démarrage de printemps, comme indiqué dans ce post

exemple d'application pom.xml:

<project>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    // rest of the example-app pom declarations
</project>

Après cela, dans les modules poms (app-web, app-impl, etc.), vous déclarez exemple-app comme parent, mais maintenant vous pouvez inclure les dépendances de démarrage comme vous le feriez normalement dans un projet normal.

app-web pom.xml:

<project>
    <parent>
        <groupId>org.demo</groupId>
        <artifactId>example-app</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <name>app-web</name>
    <artifactId>app-web</artifactId>
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.demo</groupId>
            <artifactId>app-api</artifactId>
            <version>1.0-SNAPSHOT</version> 
        </dependency>
        <dependency>
            <groupId>org.demo</groupId>
            <artifactId>app-impl</artifactId>
            <version>1.0-SNAPSHOT</version> 
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    // rest of the app-web pom declarations
</project>

En ce qui concerne la gestion des versions, ce que j'ai utilisé dans ces exemples ne sont pas exactement les meilleures pratiques, mais étant hors de portée de la question, j'ai ignoré la gestion des dépendances et l'utilisation des propriétés parentales.

De plus, si un démarreur est utilisé dans chaque module, vous pouvez déclarer la dépendance dans le pom parent, puis tous les modules en hériteront (par exemple spring-boot-starter-test )

9
saljuama