我是Maven的新手,來自Rails背景。在高層次上,如果我正在運行測試,本地運行應用程序以及何時部署到生產環境,我想連接到其他數據庫。如何使用maven管理開發,生產,測試配置?
這就是我的想法。當我運行mvn test
時,它應該使用test.properties,當我在本地運行mvn jetty:run
時,它應該使用dev.properties,並且在部署它時應該拾取已在服務器上的屬性文件,而不是在WAR中。
但我不知道這是如何通常在用Maven構建的Java項目中完成的。
我是Maven的新手,來自Rails背景。在高層次上,如果我正在運行測試,本地運行應用程序以及何時部署到生產環境,我想連接到其他數據庫。如何使用maven管理開發,生產,測試配置?
這就是我的想法。當我運行mvn test
時,它應該使用test.properties,當我在本地運行mvn jetty:run
時,它應該使用dev.properties,並且在部署它時應該拾取已在服務器上的屬性文件,而不是在WAR中。
但我不知道這是如何通常在用Maven構建的Java項目中完成的。
對於你的測試,你可以把一個唯一的測試,Spring配置文件或屬性文件到模塊的測試資源,並有該模塊生成測試-JAR。然後從測試期間需要它的任何模塊引用該測試jar作爲測試範圍依賴項。
對於開發模式與生產模式運行,一個可能的非Maven的相關解決辦法是使用一個環境變量,它指定一個不同的Spring配置的/ properties文件/ xml文件來使用。
你可以使用maven profiles來做到這一點。您可以針對不同的環境,數據集等設置不同的配置文件,並根據您正在構建的環境激活它們。
我們使用配置文件來區分不同的構建階段,並且我們爲每個配置文件使用不同裝配描述符的裝配插件。我們有類似下面的代碼。我們的默認配置文件是開發版,但是當我們發佈「release」配置文件時會自動激活。程序集描述符非常簡單,我們有一個「通用」目錄結構,一個用於開發,一個用於發佈。
<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>
那真的是最簡單的(或規範)的方式test.properties,dev.properties等之間做出選擇? – jshen 2011-06-08 23:07:26
這就是我們至少這樣做的方式。它一直爲我們工作得很好,而且不難維護,第一次很難弄清楚。 – 2011-06-09 17:34:14
爲什麼要投票? – CoolBeans 2014-06-09 13:41:20
好的,編輯了這篇文章。謝謝。 – CoolBeans 2014-06-10 15:37:34