2010-07-20 24 views
1

J'ai deux projets, "appA" et "appB", qui dépendent chacun d'un troisième projet, "commun". Je suis en train de les déplacer de fourmi à maven, mais j'ai de la difficulté à trouver la meilleure façon de le faire en maven. Ma structure de dossier ressemble à ceci:Deux projets distincts avec un projet dépendant partagé en maven

root 
+ common 
+ appA 
+ appB 

J'ai été en mesure d'ajouter un pom.xml parent à la racine et ont commune APPA et AppB en tant que modules de ce projet parent pour arriver à construire appA et AppB, mais ce n'est pas ce que je veux, une racine pom.xml n'est pas appropriée car appA et appB sont des projets complètement indépendants. Je souhaite que appA et appB soient des projets maven séparés qui dépendent tous deux du troisième projet commun et le construisent si nécessaire, de sorte que je puisse entrer dans le dossier appA ou appB et taper "mvn package" pour construisez appA + common ou appB + common, respectivement. C'est ainsi que je l'ai installé dans Ant mais il n'y a peut-être pas de parallèle approprié dans maven. Toute aide ou coups de coude dans la bonne direction est grandement appréciée :)

Répondre

0

(...) mais ce n'est pas ce que je veux, un pom.xml racine ne convient pas depuis appA et AppB sont des projets complètement indépendants.

de ne pas le faire, ne pas utiliser l'agrégation si vous ne voulez pas et simplement déclarer common comme une dépendance dans le POM de appA et dans le POM de appB. Quelque chose comme ceci:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>foo</groupId> 
    <artifactId>appA</artifactId> 
    <packaging>jar</packaging> 
    <version>X-SNAPSHOT</version> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>bar</groupId><!-- at your discretion --> 
     <artifactId>common</artifactId> 
     <version>Y.Z-SNAPSHOT</version> 
    </dependency> 
    ... 
    </dependencies> 
    ... 
</project> 

dépendances sont résolues par le dépôt local, vous aurez donc devoir mvn install le projet common premier (et après tout changement pour les rendre « visible »).

Lors du développement, une pratique courante consiste à importer des projets dépendants dans votre EDI et à les configurer pour qu'ils dépendent du projet dans l'espace de travail (vs les dépendances binaires). Cela enregistre l'étape install pour rendre les modifications visibles. La plupart des IDE supportent cette approche.

+0

C'est ainsi que j'ai pensé que cela fonctionnerait, mais je n'arrive pas à comprendre comment faire référence au projet commun sans que cela fasse partie d'un projet parent. Existe-t-il un moyen d'utiliser un chemin relatif dans la dépendance? Je devrais utiliser "../common" quelque part pour dire où ce projet est, non? – jgor

+0

@jgor: Non, les dépendances sont résolues via le référentiel local, vous devrez exécuter 'install' sur le projet' common' pour l'installer dans le référentiel local. –

+0

Merci! Je n'avais pas bien saisi le concept du référentiel local. J'ai au moins un exemple simple qui fonctionne maintenant. – jgor