Предлагаете хороший подход для нацеливания на разные базы данных и конфигурации для dev / test / qa с Maven2? - PullRequest
1 голос
/ 13 июля 2010

Привет! Я начинаю новый проект веб-разработки со своей командой, используя Hibernate и Spring MVC.Мы будем работать с Maven2 и использовать среду IDE NetBeans.Наши прошлые проекты использовали муравей для системы сборки.Мы будем использовать Atlassian Bamboo для нашего CI-сервера.

Мой вопрос касается наилучшей практики переключения между средами dev / test / qa / производственной сборки, которые имеют разные конфигурации.

Более конкретно, нашДля сред разработки требуются две конфигурации: база данных общего сервера и локальная база данных HSQL для автономной разработки.Наша тестовая среда также требует использования HSQL для обеспечения предсказуемых тестов.

Я пытаюсь найти лучший подход с Maven для выбора между этими средами, с муравьем, который мы только что использовали, чтобы иметь <copy> цели, которые могли быскопируйте наши файлы конфигурации из предопределенных каталогов перед сборкой и перепишите некоторые .properties файлы.

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

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

Спасибо за вашу помощь и терпение.

ОБНОВЛЕНИЕ : более простой способ, если кому-то интересно.

Идея состоит в том, чтобы объединить использование обоих профилей с тегом ресурсов.Создайте отдельные папки для каждой целевой среды и включите их в ресурсы.

<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>

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Если ваша цель - создать разные копии вашего jar-файла для каждой среды, где единственное отличие состоит в том, что находится в папке ресурсов, тогда вы можете воспользоваться maven-resources-plugin и пусть он скопирует ваши файлы конфигурации из предопределенных каталогов.

Чтобы эмулировать ваши настройки, я создал проект, который имеет следующие файлы:

  • src/main/resources/dev/app.properties
  • src/main/resources/qa/app.properties

Моя цель состоит в том, чтобы в упакованной банке было:

  • 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 в параметрах виртуальной машины, я получаю "dev" версию файла в "environment"папка, как задумано.

Я очень рекомендую для дальнейшего чтения, посмотрев на "Better Builds with Maven".Это бесплатная электронная книга, которую вы можете найти на Maven - Внешние ресурсы .Работа с ресурсами classpath описана в разделе 2.6 (примечание: ссылка на эту страницу не работала правильно, когда я попробовал ее, но в итоге я получил электронную книгу из кэшированной версии от Google).

1 голос
/ 13 июля 2010

Профили - определенно способ, которым Maven поддерживает подобные вещи.На сайте Maven есть страница , в которой описывается, как создать для различных сред , которая, кажется, должна соответствовать вашим потребностям (по сути, она использует плагин Maven AntRun для дублирования того, что вы делали ранее.с муравьем).Вероятно, я бы изменил этот подход к чему-то вроде:

<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, хотя он самый красивый.

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