У меня есть многомодульный проект Maven2, который создает веб-приложение. Приложение подключено к бэкэнд-серверу и БД. В нашей среде развернуто несколько экземпляров серверов, а также есть несколько экземпляров серверной части и БД для разработки, UAT, производства и т. Д. Таким образом, практически для каждой конфигурации приложения требуются эти 3 координаты:
- интерфейсный сервер
- внутренний сервер
- DB
Я работаю над унификацией и автоматизацией настройки приложения. Эти различные конфигурации легко и очевидно представить в виде профилей в Maven. Затем я могу создать конкретную конфигурацию, активировав один профиль из каждой группы, например
mvn -Pserver.Server1,backend.prod,db.uat clean install
Это немного утомительно для ввода и подвержено ошибкам - если конкретный сервер неправильно настроен для подключения к неправильной БД, цена может быть высокой. Один из очевидных способов исправить это - поместить все полезные комбинации профилей в файлы сценариев.
Но я подумал, что могу быть более умным, активировав необходимые серверные части и профиль БД прямо из профиля сервера. Профили серверов находятся в главном помпе, например
<profile>
<id>server.myserver</id>
<properties>
<jboss.home>D:\Programs\jboss-4.2.1.GA</jboss.home>
<server.name>NightlyBuild</server.name>
<hosttobind>192.168.1.100</hosttobind>
<servlet.port>8080</servlet.port>
...
<db>dev02</db>
</properties>
</profile>
И профили backend и DB находятся в pom подмодуля Config, например
<profile>
<id>db.dev02</id>
<activation>
<property>
<name>db</name>
<value>dev02</value>
</property>
</activation>
<properties>
<jdbc.address>jdbc:oracle:thin:@192.168.0.101:1521:dbdev02</jdbc.address>
</properties>
</profile>
Теоретически, поскольку профиль server.myserver
устанавливает для свойства db
значение dev02
, это должно вызвать активацию профиля db.dev02
в дочернем pom. Однако этого не происходит. (И если два профиля находятся в одном помпе, кстати). Если я установил свойство из командной строки с помощью
mvn -Ddb=dev02 help:active-profiles
тогда профиль активируется, так что, видимо, я ничего не сделал с ошибками.
Я что-то упустил? Есть ли другой способ заставить эту работу работать?
Я вижу, что существует похожий вопрос: Могу ли я активировать один профиль maven другой?
Однако, ИМХО, это не дубликат - я вижу, что мой подход не работает, и хотелось бы понять, почему. (Я прочитал ссылку, но мог пропустить что-то очевидное).