2010-03-05 1 views
12

Я пытаюсь использовать Maven2, но мои дочерние проекты не могут найти родительский проект.Maven2 не может найти родителя из относительного пути

структура каталогов выглядит следующим образом:

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

Детский файл pom.xml выглядит следующим образом:

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

Однако, когда я использую Maven не кажется, даже смотреть в относительном пути, он, кажется, пытается загрузить его из репозитория maven. Это явно не в репо. Я хочу, чтобы он посмотрел на относительный путь. Что я делаю не так? Вот сообщение об ошибке:

[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 

ответ

16

Вы не можете использовать свойство для родительской версии - оно должно совпадать. На данный момент это необходимо для того, чтобы сборка была воспроизводимой позднее. Ряд людей отслеживают это по выпуску https://issues.apache.org/jira/browse/MNG-624

1

Оно должно быть:

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

Это не проблема (была только типография IMO), это не работает. –

+0

Это все еще помогло, онлайн-документация maven (http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_2) на самом деле использует ..., который, я думаю, является опечаткой на их веб-сайте – vagabond

11

Насколько мне известно, переменная расширение не работает в родительском элементе (см MNG-624 и комментарии для фона вокруг этого), вам нужно установить версию в явном виде:

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

Кстати, если вы хотите использовать ту же версию для всех модулей, вы должны просто наследовать его в детском проекте, т.е. не отменяет его (реальная потребность в ${app.version} IMO), а не наоборот.

+0

Работала для меня после указания пути pom.xml. –

1

Возможно, тип упаковки и/или идентификатор версии не совпадают. Я получил ту же ошибку, что и вы, но играл с типом упаковки и получил ее на работу. Попробуйте следующее.

Ниже представлен фрагмент родительского pom.xml. Тип упаковки - «pom». У меня нет никакого кода для родительского приложения, только общий pom.xml для совместного использования: pom.xml

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

ребенка. Это веб-приложение так типа упаковки является «война»:

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

Проблема, вероятно, что вы использовали .../ вместо ../.

+0

(Вы поставили «... /» Я имею в виду вместо «../») – tzrtzer

7

Я обнаружил, что вам нужно сначала установить родительский pom, а затем последующие дочерние помпы могут прочитать их из репозитория.

использование: mvn -N install

Это установит родительский POM без запуска других дочерних Poms.

Смежные вопросы