Проект с несколькими модулями maven с родительским pom и svn layout
В настоящее время у меня около 16 проектов, которые я создаю с помощью maven, которые развертываются на одном сервере приложений, которые составляют нечто вроде "портала". Я построил родительский pom для обработки общих зависимостей и конфигураций плагинов. В настоящее время моя структура SVN выглядит примерно так:
portal_root
+project1
+tags
+branches
+trunk
+project2
.
.
.
+projectn
pom.xml
Индивидуальные проекты разворачиваются отдельно. То есть проект1 не имеет зависимости от project2, и каждый может быть изменен и развернут без необходимости изменять что-либо еще.
Это представляет проблему с SVN, как если бы другой разработчик захотел проверить весь корень портала, чтобы также получить родительский pom, они также по умолчанию вытащили бы копии всех тегов и ветвей! Не совсем идеально.
Единственное, что я могу придумать, это использовать что-то вроде этого:
portal_root
+tags
+branches
+trunk
+project1
+src
pom.xml
+project2
.
.
.
pom.xml
Однако теперь все изменения проекта будут отслеживаться в папке тегов. Для меня это не большая проблема, но теперь ветвление становится болью.
В настоящее время я также работаю над подключением Teamcity к этому, что было бы немного легче, так как мне нужно было бы смотреть только один каталог (например, теги), чтобы поймать все, что нужно построить. Я также развертываю артефакты в репозитории предприятия Nessus.
Я надеюсь, что кто-то может дать мне несколько предложений здесь, так как мне не удалось найти достойную документацию, в которой говорится о жизненном цикле всей сборки и ее лучших практиках.
Мне нравится идея создания и развертывания всех проектов с помощью одной команды maven. Мне также нравится иметь все общие зависимости, информацию о репозитории и информацию о плагинах в одном месте.
Ответы
Ответ 1
Вы можете использовать следующий макет:
+parent-project
pom.xml
+child-project-1
pom.xml
+child-project-2
pom.xml
В родительском проекте pom add:
<modules>
<module>../child-project-1</module>
<module>../child-project-2</module>
</modules>
В проектах для детей pom add:
<parent>
<artifactId><!-- parent artifactId --></artifactId>
<groupId><!-- parent groupdId --></groupId>
<version><!-- parent version --></version>
<relativePath>../parent-project</relativePath>
</parent>
Проекты для детей могут быть зависимыми.
Следующие ссылки также могут помочь:
Ответ 2
Вариантом подхода JohnS будет использование svn:externals
для привязки соответствующих соединительных линий/тегов/ветвей ваших подпроектов к соответствующей ветке/тегу/ветки вашего родительского проекта. Таким образом, проверка одного варианта вашего родителя вытащила бы всю правильную версию других проектов.
Это имеет смысл, только если разумно проверять все ваши проекты вместе.