在平常開(kāi)發(fā)的過(guò)程中,我們的項(xiàng)目配置文件經(jīng)常有有幾套分別對(duì)應(yīng)自己本地的環(huán)境、開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、以及生產(chǎn)環(huán)境。因?yàn)樵诓煌沫h(huán)境中項(xiàng)目的相關(guān)配置也會(huì)有相關(guān)的不同,我們?cè)诓煌沫h(huán)境中部署就要手動(dòng)修改為對(duì)應(yīng)環(huán)境的配置,這樣太麻煩了以及這樣也會(huì)很容易出錯(cuò)。
目前JAVA相關(guān)的項(xiàng)目基本都是使用Maven來(lái)進(jìn)行構(gòu)建。在maven中實(shí)現(xiàn)多環(huán)境的構(gòu)建可移植性需要使用profile,通過(guò)不同的環(huán)境激活不同的profile來(lái)達(dá)到構(gòu)建的可移植性。
接下來(lái)我們就通過(guò)maven的相關(guān)配置來(lái)在打包時(shí)指定各個(gè)環(huán)境對(duì)應(yīng)配置文件。
第一步 pom文件中的profile
首先時(shí)pom文件中profile配置
<!-- 定義打包環(huán)境變量,本地環(huán)境,生產(chǎn)環(huán)境;測(cè)試環(huán)境;開(kāi)發(fā)環(huán)境 -->
<profiles>
<profile>
<!-- 本地開(kāi)發(fā)環(huán)境 -->
<id>localhost</id>
<properties>
<profiles.active>localhost</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 開(kāi)發(fā)環(huán)境 -->
<id>development</id>
<properties>
<profiles.active>development</profiles.active>
</properties>
</profile>
<profile>
<!-- 測(cè)試環(huán)境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<!-- 生產(chǎn)環(huán)境 -->
<id>production</id>
<properties>
<profiles.active>production</profiles.active>
</properties>
</profile>
</profiles>
在pom文件中添加以上的配置信息,來(lái)區(qū)分本地環(huán)境,目錄、開(kāi)發(fā)環(huán)境目錄、測(cè)試環(huán)境目錄以及生產(chǎn)環(huán)境目錄。
其中l(wèi)ocalhost的節(jié)點(diǎn),我們?cè)O(shè)置了
<activation>
<activeByDefault>true</activeByDefault>
</activation>
這里是設(shè)置本地的環(huán)境是默認(rèn)激活的,如果我們?cè)诖虬鼤r(shí)不指定相關(guān)的文件,項(xiàng)目就默認(rèn)指定本地的配置文件了。其中profiles.active表示被激活的profile的配置文件的目錄。
第二步 工程目錄建立對(duì)應(yīng)目錄
因?yàn)閙aven的配置文件一般都是在src/main/resource目錄下,所以我們?cè)趓esource目錄下面分別新建localhost、development、test、production這四個(gè)文件目錄;如下圖:

pom文件中設(shè)置build配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 資源根目錄排除各環(huán)境的配置,防止在生成目錄中多余其它目錄 -->
<excludes>
<exclude>test/*</exclude>
<exclude>localhost/*</exclude>
<exclude>production/*</exclude>
<exclude>development/*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/${profiles.active}</directory>
</resource>
</resources>
</build>
各個(gè)環(huán)境的配置我們?cè)诘诙€(gè)節(jié)點(diǎn)中通過(guò)前面在profile中配置的profiles.active屬性來(lái)指定。即src/main/resources/${profiles.active}。這樣在激活指定的profile時(shí),會(huì)加載指定目錄下的配置文件,如當(dāng)前激活的是pro profile,那么這個(gè)資源目錄就是src/main/resources/pro。這樣就達(dá)到了不同環(huán)境加載不同配置的目的。
項(xiàng)目編譯
通過(guò)在運(yùn)行maven命令時(shí)指定不同的profile即可構(gòu)建不同環(huán)境需要的war包或發(fā)布到不同的環(huán)境了 。如:
mvn clean package -Pproduction
這樣我們就是打包生產(chǎn)環(huán)境的配置了。
如果我們是idea開(kāi)發(fā)的話,我們可以不用些命令的方式
我們打開(kāi)idea的maven窗口。

我們這里可以勾選不同的配置環(huán)境來(lái)打包對(duì)應(yīng)的環(huán)境配置文件。