项目开发好以后,通常要在多个环境部署,环境:本机环境(local)、(开发小组内自测的)开发环境(dev)、(提供给测试团队的)测试环境(test)、预发布环境(pre)、正式生产环境(prod),每种环境都有各自的配置参数,比如:数据库连接、远程调用的ws地址等等。如果每个环境build前手动修改这些参数,显然太不fashion.
maven早就考虑到了这些问题,看下面的pom片段:
<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节点,参考下面的示例:
<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环境来替换属性值。
config.properties
# 对应maven profiles中配置
jdbcUrl=${db-url}
user=${db-username}
password=${db-password}
devMode=true
各属性节点的值,用占位符"${属性名}"占位,maven在package时,会根据profile的环境自动替换这些占位符为实际属性值。
默认情况下:
maven package
将采用默认激活的profile环境来打包,也可以手动指定环境,比如:
maven package -P dev
将自动打包成dev环境的部署包(注:参数P为大写)