Publié le 09/19/2018, rédigé par Gaulthier LALLEMAND

Maven

Comment modifier les répertoires de sources et de tests dans un pom MAVEN ?

Organisation de l'arborescence de fichiers

Classiquement, l'arborescence de fichiers d'un module est la suivante (par exemple en java) :

.                       <= Racine du projet
|__ src/
|   |__ main/
|   |   |__ java/       <= Placer les sources écrites en java ici
|   |
|   |__ test/
|       |__ java/       <= Placer les sources des tests écrits en java ici
|
|__ pom.xml             <= Fichier de build de Maven

Mais il peut arriver qu'un module (pour différentes raisons) ne se présente pas ainsi. On peut avoir quelquechose comme ça :

.                       <= Racine du projet
|__ app/                <= Les sources sont ici ainsi que dans les sous-répertoires
|   |__ dir1/
|   |__ dir2/
|
|__ test/               <= Les sources des tests sont ici ainsi que dans les sous-répertoires
|   |__ dir3/
|   |__ dir4/
|
|__ pom.xml             <= Fichier de build de Maven

Configuration du pom de Maven

Afin de dire à MAVEN qu'il faut aller chercher les sources et les tests dans des répertoires non-standards, j'utilise le plugin build-helper-maven-plugin ainsi :

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

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <!-- J'ajoute les sources -->
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <!-- Les répertoires de sources se placent ici -->
                                <source>app</source>
                            </sources>
                        </configuration>
                    </execution>
                    <!-- J'ajoute les tests -->
                    <execution>
                        <id>add-test-source</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <!-- Les répertoires contenant les tests se placent ici -->
                                <source>test</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>