2009-07-09 10 views
4

Imaginez le scénario suivant:versions Maven, branches de subversion et dépôt local

Nous avons beaucoup de développement parallèle passe dans plusieurs branches svn. Certains projets sont non ramifiés et certains sont branchés. Il y a beaucoup d'interdépendance. Nous avons également un référentiel local (donc aucun développeur ne télécharge les paquets directement, nous utilisons notre propre référentiel maven). Le problème est avec maven nous devons spécifier des versions dans tous les fichiers pom. Les artefacts avec la version sont stockés dans notre référentiel local. En travaillant avec plusieurs branches, nous remplacerons la même version (dans le fichier pom) des artefacts avec les artefacts d'une autre branche.

Si j'utilise le numéro de version dans le fichier pom pour inclure également des informations de branche, le problème se pose pour les modules non-ramifiés qui dépendent de nombreux modules branchés.

Existe-t-il une solution/politique standard pour faire face à ce problème?

Créer un référentiel séparé pour chaque branche est une solution, mais en regardant le nombre de branches que nous pouvons avoir, c'est un peu cher.

Répondre

6

Je ne pense pas que ce soit SOP pour utiliser un classificateur pour cela, mais cela devrait fonctionner. Je crois que l'intention du classificateur est de créer différentes versions d'un artefact basé sur des filtres spécifiques à la région, des versions JDK, etc. Mais cela semble être une chose très spécifique au projet/à l'environnement, donc je pense que .

Si vous deviez spécifier vos objets comme celui-ci:

<artifactId>artifact-a</artifactId> 
<groupId>com.mygroup</groupId> 
<version>1.1-SNAPSHOT</version> 
<classifier>BRANCH-Q</classifier> 

Dans votre dépôt vous obtiendrez:

artifact-a-1.1-SNAPSHOT-BRANCH-Q.jar 

Ensuite, vous pouvez spécifier des artefacts dans les dépendances à l'aide du classificateur pour obtenir la bonne .

1

Je pense que votre approche en ajoutant le nom de la branche à la version est la bonne. Cependant, vous devriez essayer d'éviter d'avoir des artefacts non-ramifiés en fonction des versions branchées. Considérons que vous avez une ligne de réseau A qui dépend d'une version de B dans une branche appelée DEV.

Dans ce cas, je dirais que soit A devrait dépendre d'une version libérée de B dans la jonction, soit devrait être dans la branche DEV elle-même.

espoir qui fait sens ...

+0

Vous avez raison, mais nous avons déjà de telles dépendances et il est beaucoup de travail pour supprimer ces dépendances. Certains modules dépendent déjà de choses branchées et il sera difficile de garder une trace des dépendances dans les fichiers pom. – rangalo

0

Je ne sais pas d'une approche standard pour cela. Généralement, il est plus facile de différencier les branches en ajoutant quelque chose de différent au numéro de version, ou éventuellement à l'artefactID.

Vous pouvez également utiliser un schéma de numérotation pour différencier les branches. Par exemple, si le tronc est la version 2.0 (prochaine version majeure), la branche pourrait être 1.1 (version de maintenance pour la version précédente).

Je ne suis pas sûr de ce que vous entendez par "notre dépôt local". Si vous voulez dire un référentiel d'équipe/entreprise interne partagé, alors vous voulez éviter les collisions de versions entre différentes branches, sinon vous aurez des problèmes de construction très étranges avec différents artefacts ayant le même nom/version. Si les développeurs travaillent UNIQUEMENT les branches sur leurs référentiels locaux et que ces artefacts ne sont pas ajoutés à un référentiel partagé (via un serveur CI, par exemple), alors vous devriez généralement être OK.

Vous devez également faire attention aux projets branchés en fonction des artefacts partagés. Supposons que vous ayez A (ligne de réseau) et B (branche) les deux en fonction de C. Si vous modifiez C pour prendre en charge les changements de B, alors A sera affecté. Vous devez branche B dans cette situation, ou juste être très prudent. Pourriez-vous utiliser la fonction de classificateur pour votre artefact?

Questions connexes