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 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
Ответы
Ответ 1
Вы не можете использовать свойство для родительской версии - оно должно совпадать. На данный момент это необходимо для того, чтобы сборка была воспроизводимой позднее. Ряд людей отслеживают это по выпуску https://issues.apache.org/jira/browse/MNG-624
Ответ 2
Насколько я знаю, расширение переменной не работает в родительском элементе (см. 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>
Кстати, если вы хотите использовать ту же версию для всех своих модулей, вы должны просто наследовать ее в своем дочернем проекте, т.е. не переопределять ее (нет реальной потребности в IMO ${app.version}
), а не в другом наоборот.
Ответ 3
Я обнаружил, что вам сначала нужно установить родительский pom, затем последующие дочерние помпы могут читать их из репозитория.
use: mvn -N install
Это установит родительский pom без запуска других дочерних poms.
Ответ 4
Это должно быть:
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>myapp</artifactId>
<version>${app.version}</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Ответ 5
Возможно, тип упаковки и/или идентификатор версии не совпадают. Я получил ту же ошибку, что и вы, но играл с типом упаковки и получил ее на работу. Попробуйте следующее.
Ниже представлен фрагмент родительского pom.xml. Тип упаковки - "pom". У меня нет кода для родительского приложения, только общий pom.xml для совместного использования:
...
<groupId>com.mycompany.app</groupId>
<artifactId>parent</artifactId>
<version>${app.version}</version>
<packaging>pom</packaging>
Ребенок pom.xml. Это webapp, поэтому тип упаковки - "война":
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>parent</artifactId>
<version>${app.version}</version>
<relativePath>../parent/pom.xml</relativePath>
<packaging>war</packaging>
</parent>
Ответ 6
Вероятно, вы использовали .../
вместо ../
.