利用maven實現差別化配置

回顧過去

  生產環境,測試環境,開發環境在不一樣的環境下會有各類各樣的配置,好比數據庫連接地址,帳戶名,密碼等等.不一樣環境下都須要配置,可是配置卻又不一樣.之前分享過一篇文章,介紹了我以前A公司的差別化配置實現( http://www.cnblogs.com/abcwt112/p/5203348.html  原理就是增長一個classpath目錄,把差別化配置都放在這個目錄下,而後差別化文件不打包.這樣差別化配置就會直接讀取自指定的classpath下的文件)..此次我想來分享一下怎麼使用maven來實現打差別化的包.html

 

實現

1.數據庫

首先..按照最最最經常使用的配置方法,咱們數據庫的配置確定是會寫在一個properties文件放在resporces下的.jsp

好比host = 192.168.X.Xmaven

這個時候咱們的具體值不要寫死,而是使用佔位符的形式,就像Spring的placeholder同樣,這個佔位符咱們會在maven打包的時候被替換成具體的值.測試

因此host = ${host}ui

 

2.spa

這個host須要被替換,因此確定要有文件寫明具體要被替換成什麼值,咱們能夠新建2個文件,1個叫test.properties.裏面host = test.XXXXX打測試包的時候就用這個值替換配置文件裏的host.code

另外1個叫prod.properties,裏面host = prod.XXXX.打生產包的時候就用這個值替換配置文件裏的host.xml

 

3.在maven的pom.xml裏配置一下htm

 1 <profiles>
 2         <profile>
 3             <id>test</id>
 4             <activation>
 5                 <activeByDefault>true</activeByDefault>
 6             </activation>
 7             <build>
 8                 <finalName>test</finalName>
 9                 <filters>
10                     <filter>profiles/test.properties</filter>
11                 </filters>
12                 <resources>
13                     <resource>
14                         <directory>src/main/resources</directory>
15                         <includes>
16                             <include>**/*.*</include>
17                         </includes>
18                         <filtering>false</filtering>
19                     </resource>
20                     <resource>
21                         <directory>src/main/resources</directory>
22                         <includes>
23                             <include>param.properties</include>
24                         </includes>
25                         <filtering>true</filtering>
26                     </resource>
27                 </resources>
28             </build>
29         </profile>
30         <profile>
31             <id>prod</id>
32             <build>
33                 <finalName>prod</finalName>
34                 <filters>
35                     <filter>profiles/prod.properties</filter>
36                 </filters>
37                 <resources>
38                     <resource>
39                         <directory>src/main/resources</directory>
40                         <includes>
41                             <include>**/*.*</include>
42                         </includes>
43                         <filtering>false</filtering>
44                     </resource>
45                     <resource>
46                         <directory>src/main/resources</directory>
47                         <includes>
48                             <include>param.properties</include>
49                         </includes>
50                         <filtering>true</filtering>
51                     </resource>
52                 </resources>
53             </build>
54         </profile>
55     </profiles>

這裏配置了2個profile.在打包的時候能夠選擇. 要注意的配置是filter節點,裏面指定的是用哪一個文件裏的值去替換其餘文件.

resource節點下的directory指定了哪一個目錄下的文件須要處理.這裏我指定了src/main/resources目錄.

第一段

40                         <includes>
41                             <include>**/*.*</include>
42                         </includes>
43                         <filtering>false</filtering>

指定了這個resources下的全部文件都是須要被打包進去的.文件裏的值不須要被替換

第二段

47                         <includes>
48                             <include>param.properties</include>
49                         </includes>
50                         <filtering>true</filtering>

指定了param.properties文件是須要被打包的同時這個文件裏的值是須要被替換的.

打包的時候使用 -P prod 來指定使用prod這個profile,同理-P test來指定使用test這個profile. 好比 clean package -P prod

filtering爲true的resources節點的include必定不要配置錯..否則下面的全部文件裏的佔位符都會被替換..好比你的jsp裏的${}也會被替換...因此要替換的文件最好精確寫到文件名而不是*.*這樣

另外第一個include爲**/*.*的resources是要寫的.否則除了第二個resources裏指定的要被替換的param.properties文件,其餘文件都會被過濾不打進包裏去.

(2個配置文件裏profile節點下的build節點裏的配置徹底同樣,貌似能夠提取出來配置在pom的project節點下的build節點,因此配置可能有不少種,這是一種方式)

 

最終打包的成果:

 

這樣就可以根據打包時候選擇不一樣的profile達到差別化配置的方式.達到不一樣環境統一打包的效果.

相關文章
相關標籤/搜索