Как использовать модули Maven без svn: externals? - PullRequest
1 голос
/ 03 октября 2008

Я никогда не понимал, как / почему я бы использовал модули Maven (сборки реакторов).

У нас есть десятки библиотек, которые мы разделяем (как зависимости) между нашими продуктами, а также между библиотеками. Если бы нам пришлось перейти на создание модулей Maven, как бы мы его настроили, как в SVN, так и в наших рабочих копиях?

Действительно ли модули Maven должны быть подпапками? Они также должны быть подпапками в репозитории SVN?

Предполагая, что вам просто нужны подпапки в рабочей копии, я полагаю, что svn:externals будет работать, чтобы, скажем, библиотека "util" была модулем нескольких проектов одновременно. Но я прочитал много плохих вещей об использовании svn:externals, потому что ничто не мешает вам изменить код во внешнем, но это не отслеживается.

Есть предложения? Я скучаю по лодке по модулям?

Ответы [ 2 ]

3 голосов
/ 03 октября 2008

Нет ... модульный проект следует использовать только тогда, когда дочерний проект интегрирован в родительский проект для создания большего артефакта, поэтому примером может быть проект Enterprise, где ваши модули содержат EJB (сервер и клиент) WAR, а затем они объединяются в файл EAR. Эта модульность предназначена только для удобства и при желании может быть пропущена.

В случае библиотек многократного использования сделайте их независимыми проектами и разверните их в общем хранилище. Затем они должны быть указаны как зависимости в проекте, использующем их.

1 голос
/ 04 октября 2008

Я думаю, это проблема с Subversion. Что заставляет вас создавать структуру папок для ветвления. Другие системы контроля версий позволяют выполнять ветвление без видимости в структуре папок, где maven модули могут быть созданы более просто.

Я работаю с продуктом из более чем 250 модулей, и они располагаются в «логических» модулях maven, которые только обозначают область функционирования. например «CoreService», «Утилиты» и «Приложения». Мы очень довольны использованием для этого модулей maven, так как мы можем быть уверены, что все CoreServices используют определенную версию определенной зависимости и что во все приложения встроена определенная библиотека aspectJ.

Для вашего решения, хотя:

В модуле subversion есть функция для поиска своего родителя с именем relativePath, которая является тегом в теге parent. Единственная причина помещать подпроекты в папку его родительского элемента, чтобы их можно было поместить в реактор при создании родительского элемента. Дочерние проекты все еще могут быть собраны (и установлены) индивидуально.

Также имеется расширенная поддержка svn:externals в Subersion 1.5, которая позволяет относительные URL: s, что также должно пригодиться в этом случае.

-Удачи и сообщите сюда, если найдете решение!

...