2015-10-14 21 views
9

Nie mogę zmusić Mavena do znalezienia modułu rodzeństwa w projekcie wielomodułowym.Projekt multi modułu Maven nie może znaleźć modułu dla rodzeństwa

Uruchomiłem mvn clean install we wszystkich modułach.

Oto konfiguracja:

Product 
+-- MagniCompCommon 
+-- Model 

Projekt Model ma MagniCompCommon jako zależność. Kiedy uruchamiam mvn clean compile w Model, otrzymuję:

[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] 

Jak widać, Maven próbuje znaleźć MagniCompCommon w repo java.net (jest to pierwsza pozycja w repozytorium rodzica (Product) pom.xml).

Oto wyrobów 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> 

Oto 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> 

Tutaj jest model 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> 

Odpowiedz

14

Podczas budowania projektu Maven wielomodułowego, ty trzeba uruchomić polecenia Maven z root POM. Oznacza to, że musisz uruchomić mvn clean install na Product 's .

Pojawia się błąd, który otrzymujesz: budujesz tylko Model. W POM, Model widzi, że istnieje zależność od MagniCompCommon, więc próbuje szukać tej zależności. Najpierw wyszukuje w lokalnym repozytorium: nie znajduje go tam, ponieważ wcześniej nie instalowałeś MagniCompCommon. W rezultacie szuka go w predefiniowanych zdalnych repozytoriach (a także nie może go znaleźć).

Byłoby możliwe obejście tego przez uruchomienie najpierw mvn clean install na POM 23, MagniCompCommon, a następnie na Model POM, ale jest to o wiele łatwiejsze dzięki wywołaniu Mavena bezpośrednio na głównym POM. Poprawnie zbuduje wszystkie moduły w odpowiedniej kolejności (od Model zależy od MagniCompCommon, będzie budować najpierw MagniCompCommon, , następnieModel).

Na marginesie można usunąć wiersz <packaging>jar</packaging>, ponieważ jest to ustawienie domyślne.

+0

Tak, to był problem!Muszę znajdować się w macierzystym katalogu "Product". Taki błąd dla początkujących! Dziękuję bardzo! –

0

zauważyłem MagniCompCommon pom robi określić wersję

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

I wyrobów pom, jesteś przedstawieniu wersja 1,0

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

Czy próbowali określający wersję 1.0 w MagniCompCommon pom?

+3

Nie trzeba określać wersji, moduł odziedziczy po wersji rodzica (w tym przypadku 1.0). – Tunaki

Powiązane problemy