項目開發好之後,一般要在多個環境部署,環境:本機環境(local)、(開發小組內自測的)開發環境(dev)、(提供給測試團隊的)測試環境(test)、預發佈環境(pre)、正式生產環境(prod),每種環境都有各自的配置參數,好比:數據庫鏈接、遠程調用的ws地址等等。若是每一個環境build前手動修改這些參數,顯然太不fashion.數據庫
maven早就考慮到了這些問題,看下面的pom片斷:apache
<profiles> <profile> <!-- 本地環境 --> <id>local</id> <properties> <db-url>jdbc:oracle:thin:@localhost:1521:XE</db-url> <db-username>***</db-username> <db-password>***</db-password> </properties> </profile> <profile> <!-- 開發環境 --> <id>dev</id> <properties> <db-url>jdbc:oracle:thin:@172.21.129.51:1521:orcl</db-url> <db-username>***</db-username> <db-password>***</db-password> </properties> <!-- 默認激活本環境 --> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> ... </profiles>
profiles節點中,定義了二種環境:local、dev(默認激活dev環境),能夠在各自的環境中添加須要的property值,接下來修改build節點,參考下面的示例:oracle
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build>
resource節點是關鍵,它代表了哪一個目錄下的配置文件 (無論是xml配置文件,仍是properties屬性文件),須要根據profile環境來替換屬性值。maven
config.properties測試
# 對應maven profiles中配置 jdbcUrl=${db-url} user=${db-username} password=${db-password} devMode=true
各屬性節點的值,用佔位符"${屬性名}"佔位,maven在package時,會根據profile的環境自動替換這些佔位符爲實際屬性值。ui
默認狀況下:url
maven package
將採用默認激活的profile環境來打包,也能夠手動指定環境,好比:code
maven package -P dev
將自動打包成dev環境的部署包(注:參數P爲大寫)xml