项目开发好之后,一般要在多个环境部署,环境:本机环境(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