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