Maven жалуется на родительский относительный путь
Рассмотрим проект maven с модулями, состоящими из одних утилит (jar) и некоторых poms, на которые другие могут сослаться, если они хотят использовать некоторые из этих утилит.
например, внутри родительского pom.xml
<artifactId>project-parent</artifactId>
<modules>
<module>client-ref-pom</module> (a module with just one pom.xml)
<module>server-ref-pom</module> (a module with just one pom.xml)
<module>client-utils</module> (a module with some utility classes, needs to ref. client-ref-pom)
<module>server-utils</module> (a module with some utility classes, needs to ref. server-ref-pom)
<module>utils</module> (a module with some utility classes, needs to ref. project-parent)
</modules>
Так что, если есть другой проект, желающий использовать утилиты, он будет ссылаться на ref-pom в качестве родительского pom, чтобы свойства могли наследоваться. Эта цель служит.
В настоящее время проблема в том, что утилитам модуля также необходимо сослаться на ref-pom в качестве родительского pom (а ref-pom в качестве родительского pom будет ссылаться на project-parent), maven жалуется на то, что parent.relativePath указывает на project- parent вместо ref-pom, предлагая еще раз проверить структуру проекта.
Поскольку это всего лишь предупреждение, я все еще могу скомпилировать проект, но мне интересно, как правильно настроить структуру проекта, чтобы Maven был доволен и моя цель была выполнена.
1 ответ
Чтобы разрешить родительский проект, эти возможные источники проверены:
- relativePath
- локальный репозиторий
- удаленные репозитории
Относительный путь, если не указан явно, по умолчанию ..
то есть пом в родительском каталоге текущего проекта. Поэтому Maven проверяет, есть ли a) файл pom в этом каталоге и b) этот файл pom содержит те же координаты, которые указаны в родительском определении текущего проекта.
Если a) и b) верны, этот файл pom используется в качестве родительского для разрешения эффективного pom.
Если a) имеет значение true, а b) имеет значение false, выдается предупреждение, поскольку это обычно указывает на неправильно настроенный проект (как в вашем случае), а pom игнорируется.
Если а) ложно, другие источники проверяются.
Итак, в вашем случае, я предполагаю, что у вас есть следующее в вашем utils/pom.xml
<parent>
<groupId>...</groupId>
<artifactId>ref-pom</artifactId>
<version>..</version>
</parent>
который неявно включает в себя <relativePath>..</relativePath>
, Таким образом, Maven проверяет родительский каталог утилит, находит POM, но эта точка называется project-parent
вместо ожидаемого ref-pom
, Таким образом, предупреждение.
Следующее будет работать:
<parent>
<groupId>...</groupId>
<artifactId>ref-pom</artifactId>
<version>..</version>
<relativePath>../ref-pom</relativePath>
</parent>
(Обратите внимание, что в вашем тексте вы пишете о ref-pom, но в модулях выше есть только client-ref-pom
а также server-ref-pom
)
тем не мение
Вы должны подумать о том, действительно ли это то, что вы хотите, в вашем случае, если отдельный *-ref-pom
модули действительно необходимы, или если содержание этих poms можно и нужно лучше поместить в соответствующие *-util
модули.