繁体   English   中英

如何使用 maven 管理开发、生产、测试配置?

[英]How to manage development, production, testing configuraions with maven?

我是 Maven 的新手,来自 Rails 背景。 概括地说,如果我在运行测试、在本地运行应用程序以及部署到生产环境时,我想连接到不同的数据库。

这就是我的想法。 当我运行mvn test时,它应该使用 test.properties,当我在本地运行mvn jetty:run时,它应该使用 dev.properties,当我部署它时,它应该拾取一个已经在服务器上而不是在 WAR 中的属性文件。

但我不知道这通常是如何在使用 Maven 构建的 Java 项目中完成的。

您可以通过使用 maven 配置文件来做到这一点。 您将为不同的环境、数据集等设置不同的配置文件,并根据您正在构建的环境激活它们。

我们使用配置文件来区分不同的构建阶段,并为每个配置文件使用具有不同程序集描述符的程序集插件。 我们有类似下面的代码。 我们的默认配置文件是开发,但是当我们发布“发布”配置文件时会自动激活。 程序集描述符非常简单,我们有一个“通用”目录结构,一个用于开发,一个用于发布。

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

对于您的测试,您可以将仅用于测试的 Spring 配置文件或属性文件放入模块的测试资源中,并让该模块生成一个 test-jar。 然后将该 test-jar 作为测试 scope 在测试期间需要它的任何模块的依赖项引用。

对于在开发模式和生产模式下运行,一种可能的与 Maven 无关的解决方案是使用环境变量,该变量指定要使用的不同 Spring 配置/属性文件/xml 文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM