У меня есть мультимодульный проект Maven2, который создает веб-приложение. Приложение подключено к серверу и БД. Есть несколько экземпляров сервера, развернутых в нашей среде, и есть также несколько Серверные и DB экземпляров для развития, UAT, производство и т.д. Таким образом, практически каждая конфигурация приложения нуждается в этих 3 координаты:Почему я не могу активировать профиль Maven2 из другого профиля?
- сервер переднего плана
- фонового сервер
- DB
Я работаю на унификации и автоматизации настройки приложений. Легко и очевидно представить эти различные конфигурации в виде профилей в Maven. Затем я могу создать определенную конфигурацию, активируя один профиль из каждой группы, например.
mvn -Pserver.Server1,backend.prod,db.uat clean install
Это немного утомительно типа и подверженные ошибкам - если конкретный сервер неправильно настроен для подключения к неправильному БДУ, то цена может быть высокой. Одним из очевидных способов исправить это было бы включение всех полезных комбинаций профилей в файлы сценариев.
Но я думал, что могу быть более умным, если активировать необходимый внутренний и DB-профиль непосредственно из профиля сервера. Профили сервера находятся в главной папке, например.
<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>
И бэкэнд и профили БД находятся в конфигурации подмодуля 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, btw). Если установить свойство из командной строки с
mvn -Ddb=dev02 help:active-profiles
профиль будет активирован, хотя, по-видимому, так что я ничего не опечатка.
Я что-то пропустил? Есть ли другой способ сделать эту работу?
Я вижу, что существует подобный вопрос: Can I make one maven profile activate another?
Однако, ИМХО это не дубликат - я вижу, что мой подход не работает, и я хотел бы понять, почему. (Я прочитал ссылку, но я мог бы пропустить что-то очевидное).
@Brett, спасибо, это прояснилось. Но последнее: вы написали: «Решение, которое вы использовали, имеет одинаковые свойства для активации того, что вы хотите делать вместе, - лучшее решение». В каком смысле? Эстетически, может быть, но он все равно не работает ... –
Я имел в виду один «из командной строки». Поэтому, если вам нужно, чтобы 'profile1' подразумевал, что' profile2' активирован, убедитесь, что оба они активированы с помощью 'propertyX', а затем используйте' mvn -DpropertyX' вместо 'mvn -Pprofile1'. Это не так гибко, как то, что вы искали. –