204 votes

Sauter un sous-module pendant une construction maven

Nous avons besoin de pouvoir sauter un sous-module dans certains environnements.

Le module en question contient des tests d'intégration et son exécution prend une demi-heure. Nous voulons donc l'inclure lors de la construction sur le serveur CI, mais lorsque les développeurs construisent localement (et que les tests sont exécutés), nous voulons ignorer ce module.

Y a-t-il un moyen de faire cela avec un paramètre de profil ? J'ai fait quelques recherches sur Internet et j'ai regardé les autres questions/réponses ici, mais je n'ai pas trouvé de bonne solution.

Je suppose qu'une option est de supprimer ce sous-module du parent. pom.xml entièrement, et juste ajouter un autre projet sur notre serveur CI pour juste construire ce module.

Des suggestions ?

160voto

Raghuram Points 26896

Bien sûr, cela peut être fait en utilisant des profils. Vous pouvez faire quelque chose comme ce qui suit dans votre pom.xml parent.

  ...
   <modules>
      <module>module1</module>
      <module>module2</module>  
      ...
  </modules>
  ...
  <profiles>
     <profile>
       <id>ci</id>
          <modules>
            <module>module1</module>
            <module>module2</module>
            ...
            <module>module-integration-test</module>
          </modules> 
      </profile>
  </profiles>
 ...

Dans votre CI, vous devez exécuter maven avec le paramètre ci profil, c'est-à-dire mvn -P ci clean install

41voto

skuro Points 9235

Il est possible de décider des projets de réacteurs à construire en spécifiant l'option -pl argument de ligne de commande :

$ mvn --help
[...]
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects
[...]

Il accepte une liste de paramètres séparés par des virgules sous l'une des formes suivantes :

  • chemin relatif du dossier contenant le POM
  • [groupId]:artifactId

Ainsi, étant donné la structure suivante :

project-root [com.mycorp:parent]
  |
  + --- server [com.mycorp:server]
  |       |
  |       + --- orm [com.mycorp.server:orm]
  |
  + --- client [com.mycorp:client]

Vous pouvez spécifier la ligne de commande suivante :

mvn -pl .,server,:client,com.mycorp.server:orm clean install

pour tout construire. Supprimez des éléments de la liste pour ne construire que les modules qui vous intéressent.


EDIT : comme construction noire a souligné, à partir de Maven 3.2.1 vous avez une nouvelle -el drapeau qui exclut les projets du réacteur, de manière similaire à ce que -pl fait :

4voto

Sri Sankaran Points 4169

La notion de projets multi-modules est là pour répondre aux besoins des segments codépendants d'un projet. Un tel client dépend des services qui, à leur tour, dépendent des EJB ou des routines d'accès aux données. Vous pouvez consulter le site pourrait regroupez vos tests d'intégration continue (CI) de cette manière. Je rationaliserais cela en disant que les tests d'intégration continue doivent être en phase avec les changements de logique applicative.

Supposons que votre projet soit structuré comme suit :

project-root
  |
  + --- ci
  |
  + --- client
  |
  + --- server

Le site project-root/pom.xml définit les modules

<modules>
  <module>ci</module>
  <module>client</module>
  <module>server</module>
</modules>

Le site ci/pom.xml définit des profils tels que :

... 
<profiles>
  <profile>
    <id>default</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
     </plugin>
  </profile>
  <profile>
    <id>CI</id>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>false</skip>
       </configuration>
     </plugin>
  </profile>
</profiles>

Cela aura pour conséquence que Maven ignorera les tests de ce module sauf si le profil nommé CI est actif. Votre serveur CI doit recevoir l'instruction d'exécuter mvn clean package -P CI . Le site Web de Maven contient une explication approfondie du mécanisme de profilage .

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