maven裏如何根據不同的environment打包
一個項目裏總會有很多配置文件。而且一般都會有多套環境。開發的、測試的、正式的。而在這些不同的環境這些配置的值都會不一樣。比如mail的配置、服務的url配置這些都是很常見的。所以在打包的時候就要根據environment來選不同的值或者配置文件。
比較常用的辦法就是爲不同的環境建立不同的配置文件目錄。在打包的時候用對應的文件目錄下的配置文件。
|-- resources | |-- dev | |-- product | |-- qa | `-- qa53
以前用ant的時候打包的時候處理就比較方便。打包前copy一下對應目錄下的配置文件覆蓋target下的那些文件再打包就可以了。在剛開始用maven的時候就想要怎麼解決,一直沒有找到ant的這種方式的可行的辦法。其實主要是按ant這種處理方法去思考了。只去想沒有有cp這種target。其實在maven裏用profile就可以解決了。對於不同的environment定義不同的profile就ok了,目錄結構還是沿用原來的就可以。
在pom.xml裏定義一個變量
<properties> ...... <package.environment>qa53</package.environment> </properties>
這裏定義的值是經常打包的一個profile,方便少敲點代碼。然後定義一些profile
<profiles> <profile> <id>product</id> <properties> <package.environment>product</package.environment> </properties> </profile> <profile> <id>dev</id> <properties> <package.environment>dev</package.environment> </properties> </profile> <profile> <id>qa</id> <properties> <package.environment>qa</package.environment> </properties> </profile> </profiles>
最後再修改一下打包的plugin,引用這個變量。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> <webResources> <resource> <!-- this is relative to the pom.xml directory --> <directory>src/main/resources/${package.environment}</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin>
這裏注意一個參數<filtering>true</filtering>
,一定要設置成true這樣纔會用對應environment目錄下的配置文件覆蓋原來的。ok。mvn package的時候就會用默認的qa53目錄下的配置文件。如果要發佈正式環境的包就運行。mvn -Pproduct package