2015-10-14 18 views
9

Ich kann nicht scheinen, Maven zu einem Geschwister-Modul in einem Multi-Modul-Projekt zu finden.Maven Multi-Modul-Projekt kann Geschwister-Modul nicht finden

Ich habe mvn clean install in allen Modulen ausgeführt.

Hier ist das Setup:

Product 
+-- MagniCompCommon 
+-- Model 

Das Model Projekt hat MagniCompCommon als Abhängigkeit. Als ich mvn clean compile in Model laufen, erhalte ich:

[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Model 1.0 
[INFO] ------------------------------------------------------------------------ 
[WARNING] The POM for com.magnicomp:MagniCompCommon:jar:1.0 is missing, no dependency information available 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.585 s 
[INFO] Finished at: 2015-10-14T10:09:04-07:00 
[INFO] Final Memory: 5M/15M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal on project Model: Could not resolve dependencies for project com.magnicomp:Model:jar:1.0: Failure to find com.magnicomp:MagniCompCommon:jar:1.0 in http://download.java.net/maven/2/ was cached in the local repository, resolution will not be reattempted until the update interval of Java.Net has elapsed or updates are forced -> [Help 1] 

Wie Sie sehen können, Maven versucht MagniCompCommon im java.net Repo zu finden (das ist das erste Repository Eintrag in der übergeordneten (Product) pom.xml). Hier

ist Produkt pom.xml:

<?xml version="1.0"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.magnicomp</groupId> 
    <artifactId>Product</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 


    <modules> 
    <module>MagniCompCommon</module> 
    <module>Model</module> 
    <module>Common</module> 
    <module>Agent</module> 
    <module>Doc</module> 
    </modules> 

... snip ... 

    <repositories> 
     <repository> 
      <id>Java.Net</id> 
      <url>http://download.java.net/maven/2/</url> 
     </repository> 

Hier ist MagniCompCommon pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>com.magnicomp</groupId> 
     <artifactId>Product</artifactId> 
     <version>1.0</version> 
    </parent> 

    <!-- <groupId>com.magnicomp.common</groupId> --> 
    <artifactId>MagniCompCommon</artifactId> 
    <packaging>jar</packaging> 

Hier ist das Modell pom.xml

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>com.magnicomp</groupId> 
     <artifactId>Product</artifactId> 
     <version>1.0</version> 
    </parent> 

    <artifactId>Model</artifactId> 
    <packaging>jar</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>com.magnicomp</groupId> 
      <artifactId>MagniCompCommon</artifactId> 
      <version>1.0</version> 
     </dependency> 

    </dependencies> 

</project> 

Antwort

14

Wenn Sie bauen ein Multi-Modul Maven-Projekt, Sie müssen Maven Befehle von der Wurzel POM. Dies bedeutet, dass Sie mvn clean install unter pom.xml ausführen müssen.

Der Fehler, den Sie bekommen, wird erwartet: Sie bauen nur Model. In Model POM sieht Maven, dass es eine Abhängigkeit von MagniCompCommon gibt, also versucht es, nach dieser Abhängigkeit zu suchen. Zuerst sucht es in Ihrem lokalen Repo: es findet es dort nicht, da Sie zuvor MagniCompCommon nicht installiert haben. Daher sucht es in den vordefinierten Remote-Repositorys (und findet es auch nicht).

würden Sie in der Lage sein, dies zu umgehen, indem sie zuerst mvn clean install auf MagniCompCommon ‚s POM läuft, dann auf Model POM, aber das ist viel einfacher gemacht von Maven direkt auf dem POM root aufgerufen wird. Es wird alle Module in der richtigen Reihenfolge korrekt aufbauen (da Model von MagniCompCommon abhängt, wird es MagniCompCommon zuerst bauen, dannModel).

Als Randnotiz können Sie die Zeile <packaging>jar</packaging> entfernen, da dies die Standardeinstellung ist.

+0

Ja das war das Problem!Ich muss im übergeordneten "Product" -Verzeichnis sein. Solch ein Anfänger Fehler! Ich danke dir sehr! –

0

bemerkte ich MagniCompCommon pom doesnt geben Sie eine Version

<!-- <groupId>com.magnicomp.common</groupId> --> 
<artifactId>MagniCompCommon</artifactId> 
<packaging>jar</packaging> 

Und in Produkt pom, sind Referenzierung Sie Version 1,0

<dependency> 
    <groupId>com.magnicomp</groupId> 
    <artifactId>MagniCompCommon</artifactId> 
    <version>1.0</version> 
</dependency> 

Haben Sie versucht, Version 1.0 spezifiziert in MagniCompCommon Pom?

+3

Sie müssen keine Version angeben, das Modul erbt von der Version der übergeordneten Version (in diesem Fall 1.0). – Tunaki