2009-11-05 7 views
7

Je configure un projet multi-module avec une structure plate, c'est-à-dire que parent et enfant se trouvent dans le même répertoire de base. Parent est défini commeL'enfant ne trouve pas le parent pom dans la structure maven multi-structure structurée

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
    <artifactId>parent</artifactId> 
    <packaging>pom</packaging> 
    <version>1-0-SNAPSHOT</version> 
    <name>child</name> 
    <modules> 
     <module>../child</module> 
    </modules> 
(...) 

alors que l'enfant a défini comme

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <parent> 
     <groupId>company</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0-SNAPSHOT</version> 
</parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
<artifactId>child/artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>child</name> 
(...) 

(noms de sociétés et de projets brouillées)

Qu'est-ce qui se produit est que le module (enfant) se plaint que ne peut pas trouver le parent, à savoir:

Reason: Cannot find parent: company:child for project: company:child:war:1.0-SNAPSHOT for project company:child:war:1.0-SNAPSHOT 

Y a-t-il une solution évidente à cette question que j'ai manquée, ou est-il mal avisé d'utiliser une structure de projet plate?

Édition: Correction d'une faute de frappe.

+4

pour une raison quelconque, j'ai lu le titre de ce que "Enfant ne trouve pas de porno parent" ... lol – Jakub

+0

Je fais beaucoup cette erreur. – mikek

+1

Parent utilise la version «1-0», alors que l'enfant fait référence à «1.0» .. (notez la différence entre le tiret et le point) Ou est-ce une autre faute de frappe? – Tim

Répondre

13

Utilisez l'élément <relativePath> comme décrit dans Example 5 du Introduction to the POM:

<project> 
    <parent> 
    <groupId>company</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <relativePath>.../parent/pom.xml</relativePath> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
    <artifactId>child</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>child</name> 
    ... 
</project> 
+1

Si vous n'utilisez pas '', Maven suppose que le parent est un niveau de répertoire au-dessus de l'enfant. – hotshot309

+0

Hehe, une nouvelle belle réponse à votre compteur;) –

0

L'enfant pom ne fait pas référence au pom parent, il fait référence à un autre artefact nommé 'build'. Il faut lire:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <parent> 
     <groupId>company</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0-SNAPSHOT</version> 
</parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
<artifactId>child</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>child</name> 
(...) 
+0

Ah, désolé ... c'était juste une coquille d'obfuscation =) Le projet parent est nommé 'build' IRL. – mikek

+0

Pas de problème, qu'en est-il de la version parent? Il est défini sur 1.0-SNAPSHOT, tandis que l'enfant référence une version du parent à 1.7.0-SNAPSHOT. –

+0

Agh ... même histoire. J'ai regardé ce code trop longtemps. Si je construis le parent sans enfant tout fonctionne désormais (parce que le parent est dans mon repo local), donc ce n'est pas une faute de frappe. – mikek

2

Le parent version POM est 1-0-SNAPSHOT, plutôt que 1.0-SNAPSHOT.

+0

Salut, cette question a été répondue depuis longtemps maintenant (Et la réponse acceptée était la même que votre). Vous devriez mettre l'effort dans le non-répondu et essayer d'apporter quelque chose de nouveau à la conversation. Bonne chance! –

Questions connexes