Maven2 не может найти родителя по относительному пути - PullRequest
13 голосов
/ 05 марта 2010

Я пытаюсь использовать 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

Ответы [ 6 ]

16 голосов
/ 06 марта 2010

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

11 голосов
/ 05 марта 2010

Насколько мне известно, расширение переменных не работает в родительском элементе (см. 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), а не в другой.наоборот.

7 голосов
/ 13 января 2014

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

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

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

1 голос
/ 31 мая 2013

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

1 голос
/ 13 января 2011

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

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

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

Детский пом.xml. Это веб-приложение, поэтому тип упаковки "война":

<parent>
  <groupId>com.mycompany.app</groupId>
  <artifactId>parent</artifactId>
  <version>${app.version}</version>
  <relativePath>../parent/pom.xml</relativePath>
  <packaging>war</packaging>
</parent>
1 голос
/ 05 марта 2010

Должно быть:

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