Привет я запускаю, новый проект веб-разработки с моим использованием команды В спящем режиме и Spring MVC. Мы будем создавать с Maven2 и использовать NetBeans IDE. Наши прошлые проекты использовали муравья для системы сборки. Мы будем использовать Бамбук Atlassian для нашего сервера CI.
Мой вопрос касается лучшей практики для переключения между dev/test/qa/production средами сборки, которые имеют различные конфигурации.
Более конкретно наши dev среды требуют двух конфигураций, общей базы данных сервера и локального DB HSQL для офлайновой разработки. Наша тестовая среда также требует, чтобы использование HSQL гарантировало предсказуемые тесты.
Я пытаюсь найти, что лучший подход со Знатоком выбирает между этими средами с муравьем, которого мы просто раньше имели <copy>
цели, которые скопировали бы наши конфигурационные файлы с предопределенных каталогов до сборки и переписали бы некоторых .properties
файлы.
До сих пор я нашел, что мы могли возможно использовать профили знатока, но не совсем уверенный, каков лучший подход для этого, в настоящее время я только нашел, как установить определенные свойства с помощью этого подхода, но не нашел, как указать бесспорный, в спящем режиме конфигурации.
Я приношу извинения за свое редкое понимание Знатока, мы переключаемся на знатока, поскольку мы нашли, что разрешение зависимости удаляет огромную нагрузку для нас.
Спасибо за Вашу справку и терпение.
ОБНОВЛЕНИЕ: более простой путь, если кому-либо интересно.
Идея состоит в том, чтобы объединить обоих использование профилей с тегом ресурсов. Создайте отдельные папки для каждой из Ваших целевых сред и включайте их в ресурсы.
<build>
<resources>
<resource>
<!-- Needs to be here globally for common resources. -->
<directory>src/main/resources</directory>
</resource>
</resources>
...
</build>
<profiles>
<profile>
<id>dev</id>
<build>
<resources>
<resource>
<!-- will add anything here to the resources. -->
<directory>src/main/resource-overrides/dev</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>qa</id>
<build>
<resources>
<resource>
<directory>src/main/resource-overrides/qa</directory>
</resource>
</resources>
</build>
</profile>
....
</profiles>
Отметьте, если Вы хотите иметь ресурсы, которые перезаписывают ресурсы по умолчанию в профиле, как который необходимо включать местоположение ресурса по умолчанию в профиле после определения переопределения так:
<profile>
<id>prod</id>
<build>
<resources>
<resource>
<directory>src/main/resource-overrides/prod</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</profile>
Профили - это определенно способ Maven для поддержки такого рода вещей. На сайте Maven есть страница, описывающая, как строить для разных сред , которая, кажется, должна соответствовать вашим потребностям (по сути, она использует плагин Maven AntRun для дублирования того, что вы делали ранее. с Ant). Я бы, вероятно, изменил этот подход на что-то вроде:
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<delete file="${project.build.outputDirectory}/environment.properties"/>
<copy file="src/main/resources/environment.test.properties"
tofile="${project.build.outputDirectory}/environment.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Но уж точно не Maven, в лучшем случае.
Если ваша цель - создать разные копии jar-файла для каждого окружения, где единственное различие заключается в том, что находится в папке resources, то вы можете воспользоваться maven-resources-plugin, и заставить его скопировать ваши конфигурационные файлы из предопределенных директорий.
Для эмуляции вашей установки я создал проект, в котором есть такие файлы:
src/main/resources/dev/app.properties
src/main/resources/qa/app.properties
Моя цель - иметь в упакованном jar:
src/main/resources/environment/app.properties
где выбранная директория задается переменной environment
. Вы можете указать ее любым способом, который лучше всего подходит для вашей системы сборки (т.е. как параметр -D, переменная окружения или с помощью профилей)
Как я использовал maven-resources-plugin для достижения этой цели, добавив это в pom-файл:
<build>
<resources>
<resource>
<directory>src/main/resources/${environment}</directory>
<targetPath>src/main/reosurces/environment</targetPath>
</resource>
</resources>
</build>
Запустив это с помощью IDEA maven runner, установив -Denvironment=dev в VM Parameters, я получил "dev" версию файла в папке "environment", как и предполагалось.
Я бы очень рекомендовал для дальнейшего чтения взглянуть на "Better Builds with Maven". Это бесплатная электронная книга, которую вы можете найти на Maven - External Resources. Работа с ресурсами classpath рассматривается в разделе 2.6 (примечание - ссылка на этой странице не работала, когда я пробовал, но в итоге я получил электронную книгу из кэшированной версии от Google).