2010-04-08 2 views
4

Nous avons plusieurs projets Maven en fonction de nos bibliothèques communes.Comment trouver où une bibliothèque est utilisée dans plusieurs fichiers pom

Lorsque nous mettons à jour une bibliothèque, il serait utile de trouver rapidement quels projets ont une dépendance à la bibliothèque (et peut-être besoin d'utiliser la nouvelle version)

Il est évident que je peux regarder manuellement dans tous les fichiers pom ou écrire un script pour le faire, mais ce n'est pas idéal.

Y a-t-il des outils fournissant cette fonctionnalité? par exemple. un plugin hudson, Nexus, artificiel etc?

EDIT:

Quelques précisions:

Je ne veux pas mettre à jour tous les projets à la fois. Les tests de régression et les efforts de relâchement rendent cela peu pratique et souvent inutile (même avec des tests automatisés et des libérations). Je veux juste un rapport me montrant ce que les projets peuvent avoir besoin pour mettre à jour la bibliothèque ...

Beaucoup de réponses se concentrent autour du projet lui-même signalant quelle version est utilisée. Idéalement, la solution fonctionnerait de sorte que pour une bibliothèque donnée, je puisse demander ce qui l'utilise. Cela ressemble à ce dont parle le problème Nexus ci-dessous. Hudson fait quelque chose de similaire avec des builds maven en aval automatisés. Je pourrais envisager de l'étendre avec un plugin hudson.

+1

Cette discussion (http://nexus.sonatype.org/mailing-list-user-archives.html#nabble-td25914685) sur la liste de diffusion suggère que les développeurs Nexus y travaillent, mais il semble comme le problème n'a pas encore été implémenté (https://issues.sonatype.org/browse/NEXUS-909) –

+0

Lire cela comme "plusieurs fichiers porno". Je suis déçu. – aehiilrs

Répondre

3

Je sais que bien être un bon outil de gestion poms et des pots, Artifactory n'a pas cette fonctionnalité vous demandez :(

Vous pouvez vérifier cette question StackOverflow: Look for new versions of dependencies

vous plutôt tenter par veulent vérifier Versions Maven Plugin. Entre autres, il vous permet de numériser les dépendances de projet de creux et de produire un rapport de ces dépendances qui ont des versions plus récentes disponibles.

1

une pratique tout à fait habituelle est de déclarer toutes les versions dans dependencyManagemen t du module parent et dépendances de référence sans versions partout ailleurs. Dans ce cas, vous n'aurez besoin de mettre à jour qu'un seul POM.

+0

Bon conseil, et si vous voulez aller un peu plus loin, pensez à mettre ces dépendances dans un "pom corporatif": http://www.sonatype.com/people/2008/05/misused-maven-terms-defined/ Je n'aime pas le nom mais la technique est sacrément bonne. – whaley

+0

Nous ne mettons pas de déclaration de version au pom corporatif puisque nous exécutons un certain nombre de projets indépendants qui utilisent des dépendances complètement différentes. Je ne suis généralement pas d'accord avec le fait que la gestion de la dépendance dans les entreprises est une bonne pratique. – lexicore

+0

Nous avons un pom corporatif - mais le problème n'est pas d'avoir à mettre à jour les dépendances dans de nombreux endroits. Dans de nombreux cas, je ne veux pas mettre à niveau tous ensemble. Voir ma modification. – Pablojim

0

Pas exactement ce que vous demandez, mais le Dependency Convergence report pourrait vous être utile. Herearesomeexamples. Je suis conscient que je ne réponds pas exactement à la question avec ma suggestion, mais que je le fais dans l'autre sens (trouver tous les projets qui font référence à un artefact donné) nécessiterait de rassembler tous les POM de tous les projets et je Je ne suis pas au courant d'une solution actuellement offrant un tel référencé par fonctionnalité (un référentiel d'entreprise serait le candidat idéal pour implémenter ceci).

0

J'ai résolu ce problème en utilisant des gammes de versions de dépendances pour récupérer automatiquement les versions les plus récentes.

<dependency> 
     <groupId>foo.xyzzy</groupId> 
     <artifactId>bar</artifactId> 
     <version>[1.0.0,2.0.0)</version> 
    </dependency> 

Il peut être judicieux d'utiliser une plage de versions telles que [1.0,) pour inclure la nouvelle version 1.0 après.L'astuce pour faire ce travail est d'avoir des profils dev et prod qui incluent et excluent les repos instantanés pour vos communs et d'utiliser hudson pour construire automatiquement des projets lorsqu'une dépendance est reconstruite.

+1

Je trouve les gammes de versions très néfastes pour la stabilité et la reproductibilité de la construction et je les considère comme une mauvaise pratique. Avoir une build qui commence soudainement à échouer pour une raison inconnue est extrêmement ennuyeux, je veux contrôler les dépendances. Mais c'est une opinion personnelle bien sûr. –

+0

@Pascal, je suis d'accord avec vous en général. Je les utilise avec une mise en garde; J'ai mis en place des profils pour restreindre les repos actifs afin d'éviter le problème des builds just breakting et je ne les utiliserais que pour les composants internes qui seront publiés dans des dépôts à l'échelle du département ou de l'entreprise. Je supprime la restriction lorsque le profil dev est actif. – sal

+0

Merci pour la réponse - voir la modification - Je ne veux pas mettre à jour automatiquement. Certains changements briseront les changements ... d'autres seront mineurs s'il n'y a aucune raison de mettre à jour immédiatement, de tester la régression et de libérer toutes les dépendances. – Pablojim

Questions connexes