2012-09-06 2 views
2

J'ai une structure complexe du projet qui ressemble à ceci:l'utilisation du bambou pour construire Subversion/projet Maven qui définit POM parent (s)

- root (no pom) 
    - parent(parent pom.xml) 
    + project A (pom.xml) 
    + project B (pom.xml) 
    - project C (pom.xml) 
     - subproject 1 (pom.xml) 
     - subproject 2 (pom.xml) 
    + project N (pom.xml) 

Je dois construire subproject 2 utilisant le serveur Bamboo. J'utilise Bamboo pour extraire le code subproject 2 mais lorsque j'exécute mvn install, cela échoue avec le message "POM parent non résolu".

La génération s'exécute correctement lorsque tout le code est dans l'emplacement unique. Je ne veux pas de code de caisse au niveau root car il y a des tonnes de projets que je ne veux pas vérifier (dans mon exemple ce serait les projets A, B, N et sous-projet 1)

J'ai essayé de vérifier le code 3 fois pour le parent, le projet C/pom et le sous-projet 2, mais le code est placé sur des répertoires séparés sans relation les uns avec les autres

PS Je n'utilise aucun module, bien que je l'ai essayé avec des modules et cela n'a fait aucune différence. Je ne poste pas les POM réels puisque ceux-ci sont très triviaux, fondamentalement l'enfant pom a l'élément parent et c'est toute la relation qu'il y a.

Tous les projets en amont sont déployés à la fois prises en pension locaux et distants

+0

Est-ce une construction multi-module où utiliser parent dans le projet A, sous-projet 1, etc.? – khmarbaise

+0

Pas vraiment - ceci est limité à l'enfant pom pointant vers le pom parent. Dans mon cas, c'est sub2.pom-> projC.pm -> ../ parent.pom – Bostone

+0

Vos autres projets (par exemple, A et sub 1) sont-ils déjà construits ailleurs? –

Répondre

2

mvn recherchera les dépendances en trois endroits, dans un chemin relatif au système de fichiers local, mises en cache dans le repo m2 sur votre machine locale, ou un dépôt externe. Si vous installez toutes les dépendances sur un repo auquel bamboo peut accéder, votre build fonctionnera probablement. Pour tester cela, sur votre machine locale, pouvez-vous faire une installation mvn à partir du répertoire racine (en plaçant toutes les dépendances dans le repo m2 sur votre machine), puis extraire subproject2 dans un répertoire séparé puis mvn installer sous-projet2 ?

Si cela fonctionne, alors les dépendances du sous-projet 2 doivent être dans un repo maven auquel bamboo peut accéder. Déployez-les en utilisant quelque chose comme artifactory avant de faire l'installation de mvn avec du bambou.

+0

Que voulez-vous dire par "arbre entier"? Sur ma machine locale, je peux construire ce projet sans aucun problème. Je pense que le problème avec Bamboo est qu'il tire 3 projets dans des répertoires séparés, puis quand une build démarre, il ne trouve pas les parents POM – Bostone

+0

mettre à jour ma réponse – sbridges

+0

Juste pour réitérer - toutes les dépendances ascendantes sont déjà déployées pour repo encore quand Bamboo tente d'exécuter "mvn install" sur le sous-projet, il se plaint que la dépendance parente est manquante – Bostone

1

Nous avons une structure de projet très similaire, et je viens de vérifier que je suis capable de créer un travail Jenkins qui ne vérifie que l'équivalent de subproject1 et construit avec mvn -U clean install. Je n'ai pas accès à une instance de Bamboo, mais Jenkins et Bamboo invoquent simplement Maven sous le capot, donc il ne devrait pas y avoir de différence ici.

L'autre option qui fonctionne, comme vous l'avez mentionné, consiste à extraire le référentiel entier (ou le répertoire contenant la racine et tous les modules) et à exécuter mvn -U clean install -pl subproject1 -am sur le POM parent.

Pour vous aider, nous avons vraiment besoin de plus d'informations. Vous avez mentionné dans un de vos commentaires que "toutes les dépendances [en amont] sont déjà déployées pour repo". Voulez-vous dire votre référentiel local (c'est-à-dire .m2/référentiel)? Vous devez vérifier que ce répertoire contient tous les POM parents. Résolvez-vous tous les artefacts d'un proxy (c'est-à-dire Artifactory/Nexus)? Si oui, vérifiez également que les POM sont disponibles là.

Votre diagramme de structure actuel n'affiche pas l'emplacement des POM. Je suppose que vous l'avez configuré correctement, mais j'ai vu des cas où les gens mettent des modules enfants dans des endroits étranges, ce qui peut causer des problèmes. Le relative locations of the POMs matter (sauf si vous faites une personnalisation). Pourriez-vous exécuter tree sur la racine et désinfecter la sortie afin que nous sachions exactement où se trouvent vos POM les uns par rapport aux autres?Par exemple:

parentProject 
|-- projectA 
| |-- pom.xml 
| 
|-- projectB 
| |-- pom.xml 
| | 
| |-- subProject1 
| | |-- pom.xml 
| |  
| |-- subProject2 
|  |-- pom.xml 
| 
|-- pom.xml 

Enfin, pourriez-vous naviguer au projet de l'enfant/le module que vous essayez de construire et après la sortie de mvn help:effective-pom?

+0

Dans mon diagramme (original) chaque nœud (et feuille) contient pom.xml. Il n'y a pas de pom.xml au tout premier niveau, comme vous le voyez, il y a le répertoire "parent" au même niveau que A et B et de A, B, C ... N il est appelé "../parent". Tous les projets en amont sont déployés dans des dépôts locaux et à distance – Bostone

0

Chacun des modules maven doit être autonome, en utilisant des liens relatifs qui parlent de ../parent casse cette conception. Essayez et définissez explicitement les parents par propriétés GAV, puis assurez-vous que ces poms sont install dans votre référentiel maven local et vous pourrez créer des sous-projets.

Nous exécutons un module 15 build down 3 niveaux et tout cela est possible. Le seul problème que vous avez est quand vous bump versions, vous devrez lancer une installation du fichier pom racine pour boostrapper le processus de résolution.