2 votes

Projet Spring Boot Maven multi-modules avec profil - paquets des autres modules non trouvés

Je suis actuellement en train d'essayer de structurer mon application Spring Boot Maven avec plusieurs fichiers pom. J'ai deux applications qui ont besoin de partager beaucoup de classes. J'ai la structure suivante :

.
 application1
|   | src
    pom.xml
| application2
|   | src
    pom.xml
| shared 
|    src
|    pom.xml
|
 pom.xml

Le pom dans le répertoire Root ressemble à ceci :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>nl.example.parent</groupId>
    <artifactId>example-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>

    <!-- sub modules -->
    <modules>
        <module>application1</module>
        <module>application2</module>
        <module>shared</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <maven.plugins.version>2.22.1</maven.plugins.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <classifier>exec</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>${maven.plugins.version}</version>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.plugins.version}</version>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>application1</id>
            <modules>
                <module>shared</module>
                <module>application1</module>
            </modules>
        </profile>
        <profile>
            <id>application2</id>
            <modules>
                <module>shared</module>
                <module>application2</module>
            </modules>
        </profile>
  </profiles>

</project>

Le pom dans les répertoires application1 et application2 ressemble à ceci :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>nl.example.parent</groupId>
        <artifactId>example-parent</artifactId>
        <version>1.0</version>
    </parent>

    <groupId>nl.example.application1</groupId>
    <artifactId>example-child</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>

    <dependencies>
        <!-- Is this the right way to import the shared module into application1 or application2? -->
        <dependency>
            <groupId>nl.example.shared</groupId>
            <artifactId>example-shared</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

</project>

Ensuite, j'ai un module partagé dont la plupart des classes seront partagées entre l'application1 et l'application2. Le pom du répertoire partagé ressemble à ceci :

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>nl.example.parent</groupId>
        <artifactId>example-parent</artifactId>
        <version>1.0</version>
    </parent>

    <groupId>nl.example.shared</groupId>
    <artifactId>example-shared</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>

    <dependencies>
    <!-- Shared dependencies here --> 
    </dependencies>

</project>

Cependant, lorsque j'essaie de construire le profil spécifique pour l'une des deux applications, je reçois des erreurs pour chaque importation que j'essaie de faire à partir du module partagé. Il est évident que je fais quelque chose de mal, mais je n'arrive pas à comprendre pourquoi les classes du dossier partagé ne sont pas accessibles lorsqu'elles sont appelées depuis l'application 1. J'ai inclus le module partagé comme dépendance dans l'application1 et l'application2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X