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 модули.

Другие вопросы по тегам