Maven и несколько пользовательских настроек - PullRequest
0 голосов
/ 08 января 2020

Я работаю с приложением, которое используется в нашей компании как для внутренних, так и для внешних целей для тестирования API (от простых REST API до проприетарных двоичных протоколов). Каждый проект клиент / клиент, использующий приложение, может иметь несколько API / протоколов и версий. Это означает, что нам нужно иметь конкретную c сборку для каждого клиента.

До сих пор мы делали это, имея основной компонент, который используется в качестве зависимости maven всеми клиентами. Затем мы начали нуждаться в более сложных настройках сборки для сборок клиентов и решили создать общий родительский pom для всех проектов клиентов, что приведет к этой структуре.

            _customer1_
           /           \
parentPom /             \_ coreProject
          \             /
           \_customer2_/

Это было хорошо, если наши API и протоколы использовали SNAPSHOTS во время разработки, и нам приходилось менять версии вручную в каждом клиентском пакете только в том случае, если была выпущена версия для этого клиента (не чаще одного раза в месяц для каждого клиента). Но недавно некоторые API перешли на создание новой версии без SNAPSHOT хотя бы раз в день. Теперь это стало несостоятельным, поскольку у нас может быть несколько версий за один день.

Каждый проект клиента имеет свой собственный родительский pom, который содержит всю необходимую информацию о версии для каждого API / протокола. Однако, если мы будем использовать эту помпу в качестве родительского для нашего клиентского проекта, мы потеряем возможность повторного использования наших общих шагов сборки.

Одним из решений, которое мы попытались, было продолжать делать то, что мы делали, но добавить новый модуль в проект клиента, который использовал, например, толстый файл customer1 jar в качестве зависимости, но затем добавил правильные API / протоколы более того.

Это не сработало ... Мы столкнулись с множеством проблем с загрузчиками классов и должны найти другое решение.

Поскольку maven не поддерживает нескольких родителей, это не решение. Включение нашего конфига в общий родительский pom для всех клиентов невозможно. Мы стараемся избегать ручного копирования всех этапов сборки, поскольку мы не хотим поддерживать это.

Я не могу представить, что мы единственные, кто столкнулся с этой проблемой, но я продолжаю возвращаться к ощущение, что мы упускаем root -причину этого, так как я не могу найти доступного решения.

Так что, если вы волшебник предприятия, поделитесь своей мудростью!

1 Ответ

0 голосов
/ 08 января 2020

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

У нас есть Parent POM, где мы устанавливаем репозитории и управлять версиями зависимостей (dependencyManagement). У нас есть один основной модуль (jar), который имеет общий код / ​​функции, используемые всеми приложениями. Все приложения расширяют родительский POM и импортируют основной модуль: что такое generi c помещается в ядро ​​(я здесь упрощаю), в то время как указанный в приложении код c (может быть, клиент для вас?) Находится в приложении Подпроект Maven, где мы можем гибко настраивать / настраивать по мере необходимости.

Таким образом, у нас есть много POM с одинаковой версией, мы создаем файл WAR для каждого приложения, чтобы их можно было развернуть независимо. Обновление версии выполняется с помощью Maven Release Plugin.

Я уверен, что есть другие способы, но мы годами запускаем эту модель без огромных проблем, важно то, что она не создает циклическую c зависимость между суб-проекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...