2013-02-19 5 views
3

Mon projet est structuré comme celui-ci:Maven: modules POM et sous-modules hiérarchie

. 
|--module 
| `-- pom.xml 
| --submodule 
| `-- pom.xml 
`-- pom.xml 

du POM (simplifié):

  • Projet:
<project> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>project</artifactId> 
    <name>Project</name> 
    <groupId>org.myorg</groupId> 
    <version>1.0.6-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>module</module>  
    </modules> 
    (...) 
</project> 
  • module :
<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>org.myorg</groupId> 
     <artifactId>project</artifactId> 
     <version>1.0.6-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

    <artifactId>module</artifactId> 
    <name>Module</name> 
    <groupId>org.myorg</groupId> 
    <version>1.0.6-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>submodule</module>  
    </modules> 
    (...) 
</project> 
  • Submodule:
<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>org.myorg</groupId> 
     <artifactId>module</artifactId> 
     <version>1.0.6-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

    <artifactId>submodule</artifactId> 
    <name>Submodule</name> 
    <groupId>org.myorg</groupId> 
    <version>1.0.6-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    (...) 
</project> 

Effectué maven install dans le projet de POM ou module le projet est construit avec succès. Mais, lorsqu'il est exécuté dans sous-module occours cette erreur:

Impossible d'exécuter objectif sur le projet sous-module: Impossible de trouver l'artefact org.myorg: projet: pom: 1.0.6-SNAPSHOT

Pourquoi mon sous-module pas trouver le projet POM ? Le chemin relatif est spécifié.

Répondre

4

La première chose que je remarque est que chaque sous-module qui a un parent contient la ligne:

<relativePath>../pom.xml</relativePath> 

qui ne sert à rien, car il est par défaut dans maven ou autre mot supprimer tout simplement.

De plus, dans une construction multimodule, vous ne devez pas définir la version. Dans le cas où le groupId est toujours le même, vous pouvez omettre le groupId, car le module actuel hérite de la version de son parent.

Module

: pom.xml

<project> 
    <parent>... 
    </parent>  
    <artifactId>module</artifactId> 
    <packaging>pom</packaging> 

    <name>Module</name> 

    <modules> 
     <module>submodule</module>  
    </modules> 
    (...) 
</project> 

En dehors de cela, vous ne pouvez pas aller dans un sous-module et appeler

mvn install 

Si vous souhaitez installer un module séparé d'un multi module de construction, vous devriez utiliser une chose comme celle-ci:

mvn -amd -pl submodule install 

qui fera ce que vous aimez faire, mais généralement Ull mulit-module construire à moins que vous sachiez exactement ce que vous faites. Les options -amd est une abréviation de --sont également dépendantes. Le -pl est l'abréviation de --projets pour définir une liste de projets à réaliser pendant l'appel.

+0

-amd fait ma journée, nous avons trois niveaux de profondeur dans notre restructuration de notre projet maven et j'avais du mal à construire des modules 2 niveaux – Leo

+1

Il suffit de l'utiliser du niveau racine et de donner 'mvn -amd -pl submodule/subsubmodule installer ». – khmarbaise

1

D'abord vous devez exécuter mvn install sur le projet racine, il va créer l'artefact dans votre repo maven local. A partir de la deuxième fois, vous pouvez exécuter le sous-module uniquement. Si vous ne courez pas sur le projet racine, maven ne créera pas d'artefact pour votre projet, donc lorsque vous exécutez le sous-module, vous ne pourrez pas trouver l'artefact du repo maven.