После работы с Maven некоторое время я в восторге от многих функций, которые Maven привносит в архитектуру сборки, особенно управление зависимостями. Тем не менее, я снова и снова сталкивался с одной проблемой - как Maven разрешает зависимости между многомодульными проектами. Мне интересно, если это большой недостаток текущей реализации Maven и/или если есть удовлетворительное обходное решение.
Скажем, у меня мультимодульный проект Maven. Parent pom содержит три модуля - moduleA (jar), moduleB (jar) и moduleC (war). B зависит от A и C зависит от B. Прост достаточно? Теперь, когда я хочу запустить mvn dependency:go-offline
в родительском проекте, который должен разрешить все зависимости и привести их в локальный каталог .m2. Он терпит неудачу, потому что Maven жалуется, что он не может решить зависимость для модуляA, когда он действует на moduleB. Поскольку все эти модули принадлежат к одной группе Id, я даже пытаюсь использовать -DexcludeGroupIds=x.y.z
для исключения этих зависимостей модулей, но он все равно терпит неудачу в одной и той же точке.
Я понимаю, почему Maven жалуется - moduleA еще не построен, и, таким образом, в моем локальном или внутреннем репозитории нет объекта moduleA: jar artifact, когда выполняется статическая цель. Но IMHO плагин должен относиться к этим межмодульным зависимостям по-разному. В этом случае он должен просто игнорировать его. Можно утверждать, что я могу просто сделать mvn clean install
, который установит moduleA: jar в локальный репозиторий. После этого работает mvn dependency:go-offline
. Но это обходное решение поражает цель этой цели в оффлайне. Этот плагин позволяет нам разрешать и вытаскивать зависимости в наш локальный репозиторий без создания всего проекта. Я использовал цель dependency:copy-dependencies
в другом случае и имел ту же проблему.
Я также столкнулся с аналогичной проблемой в других сценариях: "mvn clean source-source" не удалось разрешить зависимости. Когда я запускал mvn clean compile
, все работает нормально, но когда я запускал mvn clean generate-source
, он терпит неудачу, потому что Maven не может разрешить зависимость между модулями. В этом случае это было вызвано @requiresDependencyResolution
в планете antrun.
Поскольку оба плагина antrun и плагин зависимостей очень популярны в мире Maven, я уверен, что я не единственный, кто столкнулся с этой проблемой. Кто-нибудь находит какое-либо решение/обходное решение?