2011-06-01 10 views
4

je travaille sur un multi-projets, et en ce moment j'ai une structure qui ressemble à ceci (en fait il y a quelques projets de pot et deux projets de guerre)Maven - bibliothèques de partage entre les projets

/myProj 
|_______projA (jar) 
|   |____pom.xml 
|   |____target/jar files 
|_______projB (war) 
|   |___pom.xml 
|   |___web-inf/lib/jarfiles 
|_______projEar 
|   |___pom.xml 
|___pom.xml 

Ce que je veux réaliser, est de faire projA et projB pour lire leurs dépendances d'un dossier partagé commun, au lieu de garder leur propre copie. En fait, je ne m'inquiète pas vraiment de l'endroit où ils les ont lus au moment de la compilation, mais quand j'emballe mon fichier EAR, je veux que chaque jar/war apparaisse juste une fois, réduisant ainsi la taille de l'EAR.

J'ai essayé de déclarer les dépendances sur le pom parent, en déclarant les dépendances ainsi que d'autres choses, mais jusqu'ici je n'ai pas réussi à le faire.

Existe-t-il un moyen facile d'y parvenir? Un simple plugin maven?

Merci d'avance.

Répondre

6

Vous devriez être en mesure de le faire en ajoutant le JAR en tant que dépendance à votre pom.xml de l'AER:

<dependencies> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-web</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-utils</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 

... et en spécifiant la dépendance comme il est prévu dans votre WARs de pom.xml:

<dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-utils</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>provided</scope> 
    </dependency> 

Si Maven/d'autres outils a déjà copié le fichier JAR dans votre répertoire WEB-INF/lib, vous devrez peut-être supprimer le fichier manuellement avant la reconstruction.

Cela devrait se traduire par une OREILLE de la forme:

META-INF/MANIFEST.MF 
lib/myapp-utils-0.0.1-SNAPSHOT.jar 
META-INF/application.xml 
myapp-web.war 
3

Lorsque vous vous déplacez à Maven, vous ne devriez pas stocker le JAR de dépendance dans votre base de code. Je vous suggère de créer un référentiel Maven central qui contiendra toutes les dépendances.

Référez-vous à mvn install pour d'abord installer ces artefacts dans le référentiel local. En outre, vous pouvez vous référer au maven central repository pour obtenir des artefacts pendant la construction.

Ce que vous devez faire est: supprimer tous les jar de dépendance du code source, et toute leur dépendance dans le pom.xml. Ceux-ci seraient téléchargés et empaquetés à partir du référentiel central de Maven au fur et à mesure des besoins. Définissez le Dependency Scope des artefacts en conséquence.

Questions connexes