2016-05-06 4 views
4

Рассмотрите проект maven с модулями, состоящий из некоторых утилит (jar) и некоторых poms, чтобы другие ссылались на то, хотят ли они использовать некоторые из этих утилит.Maven жалуется на родительский относительный путь

например. внутри родительского 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> 

Итак, если есть другой проект желает использовать утилиты, она будет ссылаться на реф-П в качестве родительского П, так что свойства могут быть унаследованы. Эта цель подана.

Текущая проблема заключается в том, что модуль utils также должен ссылаться на ref-pom как на родительский pom (и ref-pom будет ссылаться на project-parent как на родительский pom), maven жалуется на 'parent.relativePath' указывая на родительский проект вместо ref-pom, предлагая снова проверить структуру проекта.

Поскольку это всего лишь предупреждение, я все еще могу скомпилировать проект, но я задаюсь вопросом, как правильно настроить структуру проекта так, чтобы maven был счастлив, и моя цель обслуживается.

+1

Можете ли вы показать свою структуру проекта (структуру папок) и где находятся ваши файлы pom. – khmarbaise

ответ

9

Для разрешения родительского проекта, эти возможные источники проверяются:

  • relativePath
  • локальный репозиторий
  • удаленных репозиториев

Относительный путь, если не дано в явном виде, по умолчанию .., то есть pom в родительском каталоге текущего проекта. Поэтому Maven проверяет, есть ли в этом каталоге файл pom и b) этот файл pom содержит те же координаты, что указаны в родительском определении текущего проекта.

Если а) и b) являются истинными, этот файл pom используется в качестве родителя для разрешения эффективной pom.

Если a) истинно, а b) является ложным, то предоставляется предупреждение, так как это обычно указывает на неправильно сконфигурированный проект (как в вашем случае), а pom игнорируется.

Если а) неверно, проверяются другие источники.

Таким образом, в вашем случае, я полагаю, у вас есть следующие в ваших утилитах/pom.xml

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
</parent> 

, который неявно включает в себя <relativePath>..</relativePath>. Итак, Maven проверяет родительский каталог utils, находит POM, но эта точка называется project-parent вместо ожидаемого ref-pom. Таким образом, предупреждение.

Следующая будет работать:

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
    <relativePath>../ref-pom</relativePath> 
</parent> 

(Обратите внимание, что в тексте, вы пишете о реф-ПОМ, но в модулях выше есть только client-ref-pom и server-ref-pom)

однако

Вы должны подумать, действительно ли это то, что вы хотите, в вашем случае, если отдельные модули *-ref-pom действительно необходимы или если содержание ose poms могут и должны быть лучше размещены внутри соответствующих модулей *-util.

+0

Действительно полезная информация, спасибо! Да, и я считаю, что я должен действительно переместить модули utils на один уровень в модули ref-pom. – user1589188