2011-06-08 72 views
2

我是Maven的新手,來自Rails背景。在高層次上,如果我正在運行測試,本地運行應用程序以及何時部署到生產環境,我想連接到其他數據庫。如何使用maven管理開發,生產,測試配置?

這就是我的想法。當我運行mvn test時,它應該使用test.properties,當我在本地運行mvn jetty:run時,它應該使用dev.properties,並且在部署它時應該拾取已在服務器上的屬性文件,而不是在WAR中。

但我不知道這是如何通常在用Maven構建的Java項目中完成的。

回答

3

對於你的測試,你可以把一個唯一的測試,Spring配置文件或屬性文件到模塊的測試資源,並有該模塊生成測試-JAR。然後從測試期間需要它的任何模塊引用該測試jar作爲測試範圍依賴項。

對於開發模式與生產模式運行,一個可能的非Maven的相關解決辦法是使用一個環境變量,它指定一個不同的Spring配置的/ properties文件/ xml文件來使用。

6

你可以使用maven profiles來做到這一點。您可以針對不同的環境,數據集等設置不同的配置文件,並根據您正在構建的環境激活它們。

+0

爲什麼要投票? – CoolBeans 2014-06-09 13:41:20

+0

好的,編輯了這篇文章。謝謝。 – CoolBeans 2014-06-10 15:37:34

6

我們使用配置文件來區分不同的構建階段,並且我們爲每個配置文件使用不同裝配描述符的裝配插件。我們有類似下面的代碼。我們的默認配置文件是開發版,但是當我們發佈「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> 
+1

那真的是最簡單的(或規範)的方式test.properties,dev.properties等之間做出選擇? – jshen 2011-06-08 23:07:26

+0

這就是我們至少這樣做的方式。它一直爲我們工作得很好,而且不難維護,第一次很難弄清楚。 – 2011-06-09 17:34:14

相關問題