天天看點

使用maven profile實作多環境可移植建構

mvn clean package -P production即建構出生産環境需要的war包

mvn tomcat:redeploy -P test 即釋出到測試環境

Download or clone from GIT and then use Maven (3.0.*) and Java (1.6 or better):

$ git clone ...

$ mvn install -P bootstrap

Use the bootstrap profile only the first time - it enables some repositories that can't be exposed in the poms by default. You may find it useful to add this profile to your local settings.xml.

 https://github.com/spring-projects/spring-security-oauth

在開發過程中,我們的軟體會面對不同的運作環境,比如開發環境、測試環境、生産環境,而我們的軟體在不同的環境中,有的配置可能會不一樣,比如資料源配置、日志檔案配置、以及一些軟體運作過程中的基本配置,那每次我們将軟體部署到不同的環境時,都需要修改相應的配置檔案,這樣來回修改,是個很麻煩的事情。有沒有一種方法能夠讓我們不用修改配置就能釋出到不同的環境中呢?當然有,這就是接下來要做的事。

當然,這裡的前提是使用maven做為建構工具。

使用maven來實作多環境的建構可移植性,需要借助maven提供的profile功能,通過不同的環境激活不同的profile來達到建構的可移植性。

一、配置profile

首先是profile配置,在pom.xml中添加如下profile的配置:

這裡定義了三個環境,分别是development(開發環境)、test(測試環境)、production(生産環境),

其中開發環境是預設激活的(activeByDefault為true),這樣如果在不指定profile時預設是開發環境。

同時每個profile還定義了兩個屬性,其中profiles.active表示被激活的profile的名稱,deploy.url表示釋出伺服器的位址。我們需要在下面使用到這兩個屬性。

另外host和port分别是釋出伺服器的主機位址和端口号。

二、配置檔案

針對不同的環境,我們定義不同的配置檔案,而這些配置檔案都做為資源檔案放到maven工程的resources目錄下,即src/main/resources目錄下,且各個環境的配置分别放到相應的目錄下,而所有環境都公用的配置,直接放到src/main/resources目錄下即可。如下圖所示:

使用maven profile實作多環境可移植建構

如圖所示,開發環境、測試環境、生産環境的配置檔案分别放到src/main/resources目錄下的development、test、production三個子目錄中,而所有環境都公用的配置檔案spring-applicationContext.xml直接放到src/main/resources目錄下。其中jdbc.properties配置資料源、logback.xml配置日志。

三、maven資源插件配置

在pom中的build節點下,配置資源檔案的位置,如下所示:

首先第一個資源檔案位置src/main/resources需要排隊提各個環境的配置檔案,各個環境的配置我們在第二個<resource>節點中通過前面在profile中配置的profiles.active屬性來指定。即src/main/resources/${profiles.active}。這樣在激活指定的profile時,會加載指定目錄下的配置檔案,如目前激活的是production profile,那麼這個資源目錄就是src/main/resources/production。這樣就達到了不同環境加載不同配置的目的。

四、配置tomcat-maven-plugin插件

其中釋出的<url>節點就是在前面profile中配置的deploy.url屬性,這樣不同的環境就指定了不同的釋出位址。<server>和<path>節點分别是釋出伺服器的使用者配置的id以及應用的context名稱。

五、建構或釋出

所有需要的配置就完成了,下面是見證奇迹的時候了。通過在運作maven指令時指定不同的profile即可建構不同環境需要的war包或釋出到不同的環境了 。如:

由于預設的profile是development,是以如果我們不指定profile,那麼加載就是開發環境deployment下的配置檔案了。即我們在本地開發測試時,不用關心profile的問題。

而且本地開發時在eclipse中使用tomcat插件來進行熱部署時也不需要額外的配置。真正的做到了根據不同環境來自動切換,即可移植的建構。

另外,在進行持續內建時,使用hudson內建maven同樣是非常非常友善的。

http://blog.csdn.net/mhmyqn/article/details/24501281