Nous avons un projet Maven 2 avec de nombreux modules. Exemple:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Disons que le module "data" prend du temps à construire et que nous voulons l'exclure lorsque le projet est construit par un serveur CI. Actuellement, nous utilisons deux fichiers pom.xml pour y parvenir. L'un contient tous les modules et l'autre contient tous les modules sauf ceux qui peuvent être laissés de côté pour CI. Mais c'est assez ennuyeux car parfois on oublie de mettre un nouveau module dans les deux fichiers.
Existe-t-il une solution qui ne nécessite pas deux listes de modules distinctes?
Avec Maven 3.2.1, vous pouvez désormais utiliser
-pl !<module_name>,!<module_name>
pour exclure certains modules de la construction du réacteur.Voir cette demande de fonctionnalité: https://issues.apache.org/jira/browse/MNG-5230
la source
-
place de!
, ie-pl -<module_name>
Les projets à construire peuvent également être spécifiés sur la ligne de commande mvn. Cela éliminerait le besoin d'un pom séparé, mais à la place, vous devrez changer la configuration du CI à chaque fois qu'il y a un nouveau module.
Peut-être qu'une combinaison de cet indicateur et /
--also-make-dependents
ou--also-make
réduirait à nouveau ce fardeau de maintenance.la source
mvn clean install -pl mysubproject
Je suppose que vous voulez que la version par défaut construise toujours tout, quelle que soit la vitesse, afin que les nouveaux développeurs puissent démarrer rapidement sans avoir à en comprendre beaucoup sur le POM. Vous pouvez utiliser des profils comme celui-ci:
Le problème avec ceci est que si un développeur spécifie un autre profil sur la ligne de commande, alors le
expensive-modules-to-build
n'est pas inclus (sauf si le développeur le spécifie également). Cela complique la mémorisation des profils à inclure.Voici un moyen de contourner cela. Les deux profils sont toujours inclus, car le fichier pom.xml existe toujours. Donc, pour exclure les modules coûteux, vous pouvez utiliser
-P!full-build
sur la ligne de commande.la source
-pl !<module_name>,!<module_name>
est meilleure que cette ancienneUne autre idée: les modules Reactor peuvent être imbriqués, il devrait donc être possible de regrouper vos modules à construction rapide et lente dans des poms séparés, puis d'ajouter un autre pom d'agrégateur contenant ces deux sous forme de modules. Votre serveur CI pourrait alors uniquement référencer le pom contenant les modules de construction rapide.
la source
Vous pourriez utiliser des profils maven . Dans notre environnement de construction, nous avons créé un profil
quick
qui désactive de nombreux plugins et l'exécution de tests.Ceci est fait par
Et puis nous invoquons maven de la manière suivante
Vous pourriez peut-être désactiver la compilation et d'autres plugins standard dans le pom de votre module pour l'accélérer.
la source
Pas exactement la réponse que ces gens demandaient. Ma situation était que je voulais déployer uniquement le pom parent. J'utilise le
spring-boot-thin-layout
dans un module enfant. Cela nécessite que le module parent soit déployé dans un artificiel. J'ai ajouté ce qui suit dans mon projet. Il permet de sauterinstall
et / ou dedeploy
phase.Dans mon pom parent:
Et le (s) pom (s) de mon enfant ou tout module que vous ne voulez pas déployer avec le parent:
Donc, effectivement, lorsque je lance
mvn deploy
sur le pom parent, il compilera tous les modules, ne lancera l'installation sur rien, puis à la fin, déploiera tout module n'ayant pas<maven.deploy.skip>${disable.deploy}</maven.deploy.skip>
dans ses propriétés. Donc, dans mon cas, ne déployer que le parent.la source