Как управлять разработкой, производством, тестированием конфигураций с помощью Maven? - PullRequest
2 голосов
/ 09 июня 2011

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

Вот о чем я думал. Когда я запускаю mvn test, он должен использовать test.properties, когда я запускаю mvn jetty:run локально, он должен использовать dev.properties, а при развертывании он должен выбрать файл свойств, который уже находится на сервере, а не в WAR.

Но я понятия не имею, как это обычно делается в Java-проекте, построенном с Maven.

Ответы [ 3 ]

6 голосов
/ 09 июня 2011

Мы используем профили, чтобы различать разные фазы сборки, и мы используем плагин сборки с различными дескрипторами сборки для каждого профиля. У нас есть что-то вроде кода ниже. Наш профиль по умолчанию - разработка, но когда мы выпускаем, профиль «релиз» активируется автоматически. Дескрипторы сборки довольно просты, и у нас есть одна «общая» структура каталогов, одна для разработки и одна для выпуска.

  <build>
    <plugins>

      <!-- Enable Java 6 features. -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>6</source>
          <target>6</target>
        </configuration>
      </plugin>

      <!-- Configure for development environment. -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <id>package</id>
            <phase>package</phase>
            <goals>
              <goal>assembly</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/dist-dev.xml</descriptor>
          </descriptors>
        </configuration>
      </plugin>

      <!-- Deployment configuration. -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <groupId>${project.groupId}</groupId>
          <artifactId>${project.artifactId}</artifactId>
          <version>${project.version}</version>
          <packaging>zip</packaging>
          <file>target/${project.build.finalName}.zip</file>
          <url>${project.distributionManagement.snapshotRepository.url}</url>
        </configuration>
      </plugin>

      <!-- Release configuration. -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
          <goals>assembly:assembly deploy:deploy-file</goals>
          <useReleaseProfile>false</useReleaseProfile>
          <arguments>-Prelease</arguments>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.scm</groupId>
            <artifactId>maven-scm-api</artifactId>
            <version>1.4</version>
          </dependency>
          <dependency>
            <groupId>org.apache.maven.scm</groupId>
            <artifactId>maven-scm-provider-bazaar</artifactId>
            <version>1.4</version>
          </dependency>
        </dependencies>
      </plugin>

    </plugins>
  </build>
  <profiles>

    <!-- Release profile. -->
    <profile>
      <id>release</id>
      <build>
        <plugins>

          <!-- Artifact to deploy is assembled zip file. -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
              <groupId>${project.groupId}</groupId>
              <artifactId>${project.artifactId}</artifactId>
              <version>${project.version}</version>
              <packaging>zip</packaging>
              <file>target/${project.build.finalName}-bin.zip</file>
              <url>${project.distributionManagement.repository.url}</url>
              <updateReleaseInfo>true</updateReleaseInfo>
            </configuration>
          </plugin>

          <!-- Configure for release environment. -->
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptors>
                <descriptor>src/main/assembly/dist-rel.xml</descriptor>
              </descriptors>
            </configuration>
          </plugin>

        </plugins>
      </build>
    </profile>

  </profiles>
6 голосов
/ 09 июня 2011

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

3 голосов
/ 09 июня 2011

Для ваших тестов вы можете поместить конфигурационный файл Spring или файл свойств в тестовые ресурсы модуля, и этот модуль сгенерирует test-jar. Затем укажите этот тест-jar как зависимость области тестирования от любых модулей, которым он нужен во время тестирования.

Для работы в режиме разработки по сравнению с рабочим режимом, одним из возможных решений, не связанных с Maven, было бы использование переменной среды, которая задает другой конфигурационный файл Spring / файл свойств / XML-файл для использования.

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