J'ai besoin de quelques conseils pour structurer nos projets dans Git. Nous utilisons Java et Maven est notre outil de construction. Maven suppose un peu que tous vos projets ont finalement un ancêtre commun. Maven peut également être une véritable reine du drame lorsque les choses ne sont pas configurées exactement comme la fondation Apache configure ses projets (toute personne utilisant le plugin de publication sait probablement de quoi je parle).
Nous voulons un pom parent de haut niveau qui contrôle les versions des plugins et la configuration de la construction (configuration du référentiel, quels artefacts à construire, conventions de dénomination, versions des plugins, etc.). Maven voudrait que tous nos projets informatiques soient dans les sous-dossiers de ce projet principal. Cela implique un repo Git massif pour l'organisation.
Cela créera un environnement très bruyant. S'il y a deux équipes travaillant sur des projets non liés, elles devront constamment retirer les fusions de l'autre équipe. Idéalement, j'aimerais avoir un dépôt par projet.
Mais ce genre de conflit avec le modèle extrêmement hiérarchique de Maven, qui exige que les sous-projets soient des sous-dossiers.
J'ai besoin de conseils sur la façon dont les gens ont concilié ces deux modèles ... merci!
la source
Réponses:
Vous avez 2 options:
1. par git way: utilisez des sous-modules. Voici une documentation sur la gestion des sous-modules par git . Personnellement, je ne l'ai pas utilisé, mais cela semble correspondre à votre problème.
2. par voie maven: dans maven il n'est pas obligatoire que votre projet racine (configuration) soit hiérarchiquement le répertoire parent de tous vos projets. Vous pouvez avoir une structure comme ça:
configuration, project1 et project2 sont au même niveau de répertoire et chacun pourrait être un référentiel git. Lorsque vous générez projet1 ou projet2, vous exécutez la commande maven à partir du niveau projet1 ou projet2 et maven essaiera de récupérer le parent (configuration) du référentiel maven et non du répertoire parent. Vous devez faire attention aux versions. Je recommanderais dans project1 ou project2 de conserver une référence à un parent (configuration) avec une version finale. Pour créer une version, vous devez le faire en 2 étapes: libérer la configuration en premier et libérer le projet en second. Project1 et project2 peuvent évoluer indépendamment et n'ont pas besoin d'avoir la même version de configuration qu'un parent.
Juste pour des cas particuliers lorsque vous souhaitez avoir à la fois la configuration et les projets en tant que versions d'instantané, dans project1 ou project2, vous pouvez utiliser la
<relativePath>
balise inside<parent>
tag pour pointer vers votre chemin de configuration local. Je ne le recommande pas car cela créera des problèmes sur l'environnement de développement (au moins pour moi dans Eclipse)Je m'excuse pour mon anglais.
la source
Non, Maven veut simplement pouvoir récupérer les artefacts dont il a besoin. La meilleure façon de procéder consiste à utiliser un référentiel d'artefacts, tel que Nexus ou Artifactory . Chaque projet peut avoir son propre référentiel Git.
Voilà votre vrai problème. Il est logique d'utiliser un POM parent pour appliquer la configuration, mais il n'y a aucune raison de combiner la configuration avec le contrôle de génération. En fait, sauf pour un projet autonome à plusieurs modules, je dirais que c'est une très mauvaise idée, pour les seules raisons que vous énoncez (plus le fait que vous auriez à construire tous vos projets, tous le temps).
la source