У меня есть многомодульный проект 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>
А профили сервера и базы данных находятся в 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 активировать другой?
Тем не менее, ИМХО, это не дубликат - я вижу, что мой подход не работает, и я хотел бы понять, почему. (Я прочитал ссылку, но я мог упустить из виду что-то очевидное).