J'essaie de comprendre comment organiser de nombreux projets maven2 (environ 50+), afin qu'ils puissent se déployer dans un référentiel central nexus. Lors de l'utilisation de l' mvn deploy
objectif, il est nécessaire de spécifier la cible dans la balise distributionManagement comme ceci:
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
Maintenant, je ne veux pas que chaque pom.xml (de ces 50+) contienne ce bloc encore et encore. Mon premier serait le settings.xml
fichier, mais il semble qu'il n'est pas possible (de par sa conception) de le définir ici. Alors, la première question serait: pourquoi est-ce le cas? Si cela était possible, je pourrais le spécifier dans le fichier settings.xml de la distribution maven2, qui pourrait être distribué à tous les développeurs.
La seule solution possible que j'ai trouvée était de créer un projet master-pom à l'échelle de l'organisation, qui contient ces paramètres, et de faire en sorte que tous les autres pom.xml dépendent de ce master-pom via <parent>
tag. Mais cela semble un peu étrange dans les versions multi-modules:
- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
- Project 1 module pom (with pm as parent)
- Project 2 module pom (with pm as parent)
Habituellement, je lis dans toute la documentation que le module poms doit utiliser le pom parent, pas un autre. Mais après avoir lu le site Web maven sur l'héritage contre l'agrégation, il est écrit que c'est effectivement possible.
Un problème que j'ai trouvé était avec la génération de site maven, qui semble avoir des problèmes avec cette configuration (les modules ne sont pas liés correctement s'ils n'ont pas de référence directe)
Alors, est-ce une approche valable? Une autre solution plus évidente et plus simple au problème?
Réponses:
La meilleure solution pour cela est de créer un projet de fichier pom parent simple (avec l'empaquetage «pom») de manière générique pour tous les projets de votre organisation.
Cela peut être construit, publié et déployé dans votre nexus local afin que tout le monde ait accès à son artefact.
Maintenant, pour tous les projets que vous souhaitez utiliser, incluez simplement cette section:
Cette solution vous permettra d'ajouter facilement d'autres éléments communs à tous les projets de votre entreprise. Par exemple, si vous souhaitez standardiser votre utilisation de JUnit vers une version spécifique, ce serait l'endroit idéal pour cela.
Si vous avez des projets qui utilisent des structures multi-modules qui ont leur propre parent, Maven prend également en charge l'héritage de chaînage, il est donc parfaitement acceptable que le fichier pom parent de votre projet fasse référence au pom parent de votre entreprise et que les modules enfants du projet ne soient même pas conscients de votre société mère.
Je vois à partir de votre exemple de structure de projet que vous essayez de mettre votre projet parent au même niveau que votre agrégateur pom. Si votre projet a besoin de son propre parent, la meilleure approche que j'ai trouvée est d'inclure le parent au même niveau que le reste des modules et d'avoir votre fichier d'agrégateur pom.xml à la racine de l'emplacement de tous les répertoires de vos modules.
Ce que vous faites avec cette structure est d'inclure votre module parent dans l'agrégateur et de tout construire avec un à
mvn install
partir du répertoire racine.Nous utilisons cette solution exacte dans mon organisation et elle a résisté à l'épreuve du temps et a très bien fonctionné pour nous.
la source
Il n'y a pas besoin d'un POM parent.
Vous pouvez omettre la partie distributionManagement entièrement dans vos poms et la définir soit sur votre serveur de construction, soit dans settings.xml.
Pour le faire sur le serveur de build, passez simplement à la
mvn
commande:Voir https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html pour plus de détails sur les options pouvant être définies.
Il est également possible de définir cela dans votre fichier
settings.xml
.Créez simplement un profil qui est activé et contient la propriété.
Exemple settings.xml:
Assurez-vous que les informations d'identification pour les "instantanés" et les "versions" se trouvent dans la
<servers>
section de votre settings.xmlLes propriétés altSnapshotDeploymentRepository et altReleaseDeploymentRepository sont introduites avec maven-deploy-plugin version 2.8. Les anciennes versions échoueront avec le message d'erreur
Pour résoudre ce problème, vous pouvez appliquer une version plus récente du plug-in:
la source