Nous avons besoin de pouvoir ignorer un sous-module dans certains environnements.
Le module en question contient des tests d'intégration et dure 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 des recherches sur Google et examiné les autres questions/réponses ici et je n'ai pas trouvé de bonne solution.
Je suppose qu’une option consiste à supprimer ce sous-module du parent pom.xml
entièrement et ajoutez simplement un autre projet sur notre serveur CI pour construire ce module.
Suggestions?
Bien sûr, cela peut être fait en utilisant des profils. Vous pouvez faire quelque chose comme ce qui suit dans votre parent pom.xml.
...
<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 exécuteriez maven avec le profil ci
, c.-à-d. mvn -P ci clean install
Maven version 3.2.1 a ajouté cette fonctionnalité, vous pouvez utiliser le -pl
interrupteur ( raccourci pour --projects
liste) avec !
ou -
_ ( source ) pour exclure certains sous-modules.
mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install
Soyez prudent en bash le personnage! est un caractère spécial, vous devez donc le citer (comme je l’ai fait) ou l’échapper avec le caractère barre oblique inversée.
La syntaxe pour exclure plusieurs modules est la même que pour l'inclusion
mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install
[~ # ~] éditer [~ # ~] Windows ne semble pas aimer les guillemets simples, mais il est nécessaire dans bash; sous Windows, utilisez les guillemets doubles (merci @awilkinson)
mvn -pl "!submodule1,!submodule2" install
Il est possible de choisir les projets de réacteurs à construire en spécifiant le -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:
[groupId]:artifactId
Ainsi, compte tenu de 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 les éléments de la liste pour ne construire que les modules qui vous plaisent.
EDIT: comme blackbuild signalé, à partir de Maven 3.2.1, vous avez n nouveau -el
_ drapea qui exclut les projets du réacteur, comme ce que -pl
Est-ce que:
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, lesquels dépendent à leur tour des EJB ou des routines d'accès aux données. Vous pourriez grouper vos tests d'intégration continue (CI) de cette manière. Je rationaliserais cela en disant que les tests de CI doivent être en phase avec les changements de logique d'application.
Supposons que votre projet est structuré comme suit:
project-root
|
+ --- ci
|
+ --- client
|
+ --- server
Le project-root/pom.xml
définit les modules
<modules>
<module>ci</module>
<module>client</module>
<module>server</module>
</modules>
Le 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 entraînera des tests Maven ignorés dans ce module, sauf lorsque le profil nommé CI
est actif. Votre serveur de CI doit avoir pour instruction d’exécuter mvn clean package -P CI
. Le site Web Maven a un explication détaillée du mécanisme de profilage .
il y a maintenant (à partir de la version 1.1.1) un drapeau 'skip' dans le pit.
Pour que vous puissiez faire des choses comme:
<profile>
<id>pit</id>
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
dans votre module, et la fosse va sauter
[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-Sélénium --- [INFO] Projet en cours