2010-03-05 16 views
12

Próbuję użyć Maven2, ale moje projekty podrzędne nie mogą znaleźć projektu nadrzędnego.Maven2 nie może znaleźć obiektu nadrzędnego względem ścieżki względnej

Struktura katalogów jest następująca: plik pom.xml

--parent 
    --pom.xml 
--child 
    --pom.xml 

Dziecko wygląda następująco:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>myapp</artifactId> 
    <version>${app.version}</version> 
    <relativePath>.../parent/pom.xml</relativePath> 
</parent> 

Jednak kiedy używać Maven to nawet nie wydają się wyglądać na ścieżkę względną, wygląda na to, że próbuje go pobrać z repozytorium maven. Oczywiście nie ma go w repozytorium. Chcę, żeby spojrzał na względną ścieżkę. Co ja robię źle? Oto komunikat błędu:

[INFO] Scanning for projects... 
Downloading: http://repo1.maven.org/maven2/com/mycompany/app/myapp/${app.version}/myapp- 
${app.version}.pom 
[INFO] Unable to find resource 'com.mycompany.app:myapp:pom:${app.version}' in reposit 
ory central (http://repo1.maven.org/maven2) 
[INFO] ------------------------------------------------------------------------ 
[ERROR] FATAL ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Error building POM (may not be this project's POM). 


Project ID: null:web:jar:null 

Reason: Cannot find parent: com.mycompany.app:myapp for project: null:web:jar:null for 
project null:web:jar:null 

Odpowiedz

16

Nie można użyć właściwości dla wersji nadrzędnej - musi ona być zgodna. W tej chwili jest to wymagane, aby kompilacja była odtwarzalna w późniejszym terminie. Wiele osób śledzi ten problem pod numerem https://issues.apache.org/jira/browse/MNG-624

1

Powinno być:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>myapp</artifactId> 
    <version>${app.version}</version> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 
+0

To nie jest problem (był tylko literówka IMO), to nie działa. –

+0

To nadal pomogło, maven dokumentacji online (http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_2) faktycznie używa ... które myślę, że jest literówka na ich stronie internetowej – vagabond

11

Według mojej wiedzy, zmienna ekspansja nie działa w elementu nadrzędnego (patrz MNG-624 i komentarze na tle wokół tego), trzeba ustawić wersję extenso:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>myapp</artifactId> 
    <version>1-SNAPSHOT</version><!-- or whatever version you use --> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 

Przy okazji, jeśli chcesz używać tej samej wersji dla wszystkich modułów, należy po prostu odziedziczyć go w swoim projekcie dziecięcej IE nie zastępują go (nie ma rzeczywistej potrzeby na IMO), a nie na odwrót.

+0

Pracowałem dla mnie po wskazaniu ścieżki pom.xml. –

1

Być może typ opakowania i/lub wersja nie są zgodne. Miałem ten sam błąd co Ty, ale bawiłeś się typem opakowania i sprawiłeś, że działa. Spróbuj wykonać następujące czynności.

Poniżej znajduje się fragment nadrzędnego pliku pom.xml. Typ opakowania to "pom". Nie mam żadnego kodu dla aplikacji nadrzędnej, a jedynie wspólny plik pom.xml do udostępniania:

... 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>parent</artifactId> 
    <version>${app.version}</version> 
    <packaging>pom</packaging> 

Pom.xml dla dzieci. Jest to więc rodzaj opakowania webapp jest „wojna”:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>parent</artifactId> 
    <version>${app.version}</version> 
    <relativePath>../parent/pom.xml</relativePath> 
    <packaging>war</packaging> 
</parent> 
1

Problemem jest prawdopodobne, że stosowane .../ zamiast ../.

+0

(Włożyłeś "... /" mam na myśli, zamiast "../") – tzrtzer

7

To, co znalazłem, to to, że najpierw trzeba zainstalować pom-rodzic, następnie kolejne poms-dzieci mogą je odczytać z repozytorium.

zastosowanie: mvn -N install

To zainstaluje pom nadrzędnego bez uruchamiania innych poms potomnych.

Powiązane problemy