2010-11-20 24 views
4

J'ai un POM Maven qui agrège plusieurs modules.Maven Agréger POM avec objectif?

<project [stuff]> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.fuhu.osg</groupId> 
    <artifactId>UserManagement</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <name>UserManagement</name> 

    <modules> 
    <module>core</module> 
    <module>war</module> 
    <module>ejbs</module> 
    <module>ear</module> 
    </modules> 
</project> 

Je souhaite exécuter un objectif qui ne s'applique pas aux modules par rapport au POM de niveau supérieur. Quelque chose comme mvn db-migrate: créer. Tel est, il semble que cela tente d'exécuter ladite commande contre les sous-projets, ce qui est correct pour tous les autres objectifs, mais pas pour celui-ci.

Existe-t-il un moyen de créer un POM Maven qui soit à la fois un agrégat pour certains objectifs et un projet ordinaire pour d'autres?

+0

Avez-vous essayé des profils? Je pense que cela pourrait fonctionner dans ce cas. – javamonkey79

Répondre

6

Vous pourriez être aidé par les profils de construction Maven. Il est facile de configurer un sous-module à appeler lors de l'utilisation d'un certain profil.

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

... 
    <profiles> 
    <profile> 
     <id>db</id> 
     <modules> 
     <module>core</module> 
     </modules> 
    </profile> 
    <profile> 
     <id>all</id> 
     <activation> 
     <activeByDefault>true</activeByDefault> 
     </activation> 
     <modules> 
     <module>core</module> 
     <module>war</module> 
     <module>ejbs</module> 
     <module>ear</module> 
     </modules> 
    </profile> 
... 

Démarrez votre tâche db avec le profil db avec quelque chose comme:

$ mvn -Pdb db-migrate:create 

activation automatique des profils est possible en utilisant l'environnement du système, etc. Je ne peux malheureusement pas trouver un maven propriété pour l'objectif de ligne de commande, ce qui permettrait l'activation automatique d'un profil lorsque cet objectif spécifique est exécuté.

+0

Brillant. Ça marchera très bien. Une note à propos de votre exemple: J'ai dû activer activeByDefault dans une balise parent d'activation. –