Я пытаюсь разработать наилучший способ настройки нашего многомодульного проекта Apache Maven таким образом, который позволяет использовать разрозненные циклы выпуска модулей и не создает проблем с зависимостями при отладке проекта.
В настоящее время у нас есть настройка по строкам:
- [email protected]
- родитель-1,1-СНАПШОТ
- модуль [email protected]
- родившийся по адресу [email protected]
- модуль [email protected]
- родившийся по адресу [email protected]
- зависит от [email protected]
- модуль [email protected]
- родившийся по адресу [email protected]
- зависит от [email protected]
- зависит от [email protected]
Зависимости, объявленные в модулях b и c, содержат минимальную версию, необходимую для компиляции модуля, что необязательно является текущей версией модуля или версией развертываемого модуля.
С точки зрения сборки это хорошо работает, каждый модуль может быть выпущен/обновлен по мере необходимости, однако при попытке отладки развернутого приложения в IntelliJ IDEA (версии 8 и 9 EAP), открывшего pom верхнего уровня, IDEA решает, что с мы объявили зависимость от [email protected], что при каждом входе в один из классов он должен открыть его из a-1.2-sources.jar, а не из текущих источников [email protected] в проекте. Это еще больше смущает тот факт, что переход в любой из классов b ведет нас к [email protected], а не к b1.3.
Моя первоначальная попытка обойти это заключалась в том, чтобы объявить номера версий в разделе родительского pom dependencyManagement и просто иметь подмодули, наследующие версию. Это помогло решить проблему отладки IDEA, так как раздел dependencyManagement может указывать всем на текущие версии -SNAPSHOT.
Это, к сожалению, вызывает проблему при выпуске maven из-за необходимости освободить родительский pom до выпуска модуля, но поскольку родитель может ссылаться на несколько in-development -SNAPSHOTS, он не может быть выпущен, и мы в итоге добавляем версия ссылается на модули pom, чтобы удовлетворить выпуск.
Казалось бы, использование раздела управления зависимостями maven будет действительно действительно хорошо работать, если бы мы выпускали ВСЕ пакеты одновременно, независимо от того, изменились ли они, но поскольку мы хотим управлять выпуском каждого дополнительного модуля только тогда, когда это необходимо модель, похоже, не подходит.
У меня есть подозрение, что у меня что-то не хватает, и что сочетание диапазонов dependencyManagement и версий может удовлетворить требования, хотя я еще не видел, чтобы диапазоны версий работали правильно.
Есть ли лучший способ? Правильный способ?