Nous avons besoin de pouvoir sauter un sous-module dans certains environnements.
Le module en question contient des tests d'intégration et prend une demi-heure à s'exécuter. Nous souhaitons donc l'inclure lors de la construction sur le serveur CI, mais lorsque les développeurs créent localement (et que les tests sont exécutés), nous voulons ignorer ce module.
Existe-t-il un moyen de faire cela avec un paramètre de profil? J'ai fait quelques recherches sur Google et regardé les autres questions / réponses ici et je n'ai pas trouvé de bonne solution.
Je suppose qu'une option est de supprimer pom.xml
entièrement ce sous-module du parent et d'ajouter simplement un autre projet sur notre serveur CI pour simplement créer ce module.
Suggestions?
maven
continuous-integration
jenkins
denishaskin
la source
la source
Réponses:
Bien sûr, cela peut être fait à l'aide de profils. Vous pouvez faire quelque chose comme ce qui suit dans votre pom.xml parent.
Dans votre CI, vous exécuteriez maven avec le
ci
profil, c'est-à-diremvn -P ci clean install
la source
activeByDefault
à ce profil, puis j'ai dû ajouter un autre profil vide (par exempleskip-integration-tests
) pour pouvoir les ignorer.Maven version 3.2.1 a ajouté cette fonctionnalité, vous pouvez utiliser le
-pl
commutateur ( raccourci pour la--projects
liste) avec!
ou-
( source ) pour exclure certains sous-modules.Soyez prudent en bash le personnage! est un caractère spécial, vous devez donc soit le guetter (comme je l'ai fait), soit l'échapper avec le caractère anti-slash.
La syntaxe pour exclure plusieurs modules est la même que celle de l'inclusion
EDIT Windows ne semble pas aimer les guillemets simples, mais c'est nécessaire dans bash; sous Windows, utilisez des guillemets doubles (merci @awilkinson)
la source
mvn -pl !com.acme:nestedmodule1
mvn -pl '!path/to/submodule/directory'
, sans utiliser groupId et artifactId. Ma réponse fonctionne sisubmodule1
etsubmodule2
se trouvent dans le répertoire courant.-pl
dansmvn install
, vous aurez probablement besoin de l' utiliser pourmvn deploy
ainsiIl est possible de décider des projets de réacteur à construire en spécifiant l'
-pl
argument de ligne de commande:Il accepte une liste de paramètres séparés par des virgules sous l'une des formes suivantes:
[groupId]:artifactId
Ainsi, étant donné la structure suivante:
Vous pouvez spécifier la ligne de commande suivante:
pour tout construire. Supprimez les éléments de la liste pour ne construire que les modules qui vous conviennent.
EDIT: comme l' a souligné blackbuild , à partir de Maven 3.2.1, vous avez un nouveau
-el
drapeau qui exclut les projets du réacteur, de la même manière que-pl
:la source
mvn install -pl .
pour installer le pom parent uniquement dans le dépôt local sans construire de modules.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, par exemple, d'EJB ou de routines d'accès aux données. Vous pouvez regrouper vos tests d'intégration continue (CI) de cette manière. Je rationaliserais cela en disant que les tests CI doivent être synchronisés avec les changements de logique d'application.
Supposons que votre projet soit structuré comme suit:
Le
project-root/pom.xml
définit les modulesLe
ci/pom.xml
définit des profils tels que:Cela entraînera le fait que Maven saute des tests dans ce module sauf lorsque le profil nommé
CI
est actif. Votre serveur CI doit recevoir l'instruction de s'exécutermvn clean package -P CI
. Le site Web de Maven a une explication approfondie du mécanisme de profilage .la source
il y a maintenant (à partir de la version 1.1.1) un drapeau 'skip' dans le pit.
Vous pouvez donc faire des choses comme:
dans votre module, et pit sautera
[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Projet ignoré
la source