Кажется, есть несколько способов структурировать родительские помпы в многопроектной сборке, и мне интересно, есть ли у кого-нибудь мысли о преимуществах / недостатках каждого из них.
Самый простой способ иметь родительский pom - это поместить его в корень проекта, т.е.
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
где pom.xml является как родительским проектом, так и описывает модули -core -api и -app
Следующий метод состоит в том, чтобы выделить родителя в его собственный подкаталог, как в
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
Где родительский pom все еще содержит модули, но они являются относительными, например ../myproject-core
Наконец, есть опция, где определение модуля и родительский элемент разделены, как в
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
Где родительский pom содержит любую «общую» конфигурацию (dependencyManagement, свойства и т. Д.), А myproject / pom.xml содержит список модулей.
Намерение состоит в том, чтобы быть масштабируемым для крупномасштабной сборки, поэтому должно быть масштабируемым для большого количества проектов и артефактов.
Несколько бонусных вопросов:
- Где лучше всего определить различные общие конфигурации, такие как управление исходным кодом, каталоги развертывания, общие плагины и т. Д. (Я полагаю, что родительский, но я часто укусил это, и они оказались в каждом проекте, а не общий).
- Как плагин maven-release, hudson и nexus справляется с тем, как вы настраиваете свои мультипроекты (возможно, гигантский вопрос, более важно, если кто-нибудь узнает, когда была настроена мультипроектная сборка)?
Изменить: Каждый из подпроектов имеет свой собственный pom.xml, я оставил его, чтобы сохранить его кратким.