大家在项目开发中经常碰到这样的情况,每个项目都会有多套运行环境,比如开发环境、测试环境、生产环境等,不同的环境对应的配置也不尽相同,比如说数据库连接、文件路径、WebServices address等。
不同环境下需要构建不同的包,那么我们可以通过以下两种方式来解决:
打包的时候使用-P <profile>指定需要打哪个环境的包。
比如打开发包
不同环境下需要构建不同的包,那么我们可以通过以下两种方式来解决:
一、定义多个pom,使用-f <pom_file>指定
比如定义如下pom:
pom_dev.xml (default)
pom_qa.xml
pom_prod.xml
我们打包的时候,选择不同的pom来打不同的包
Build war for qa:
mvn clean install -f pom_qa.xml
Build war for product:
mvn clean install -f pom_prod.xml
但是多个pom.xml之间重复配置很多,不容易维护,极不推荐这种方式。
二、pom定义多个profile进行配置
目前我们项目在配置文件夹中建立了三个不同环境的配置文件夹,目录结构如下:
project/
|-- src
|-- main
| |-- java
| |-- env
| | |-- dev
| | | |-- application.properties
| | | |-- database.properties
| | | |-- sap-config.propertes
| | |-- qa
| | | |-- application.properties
| | | |-- database.properties
| | | |-- sap-config.propertes
| | |-- prod
| | | |-- application.properties
| | | |-- database.properties
| | | |-- sap-config.propertes
| |-- resources
| |-- webapp
|-- test
pom.xml里定义三个环境的profile,其中默认环境为dev:
<profiles>
<!-- 开发环境 propertites 读取pom中的变量 -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<package.env>dev</package.env>
</properties>
</profile>
<profile>
<id>qa</id>
<properties>
<package.env>qa</package.env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<package.env>prod</package.env>
</properties>
</profile>
</profiles>
build定义如下:
<build>
<finalName>pos</finalName>
<resources>
<resource>
<directory>src/main/env/${package.env}</directory>
<targetPath>properties</targetPath>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>properties/dev/*.*</exclude>
<exclude>properties/qa/*.*</exclude>
<exclude>properties/prod/*.*</exclude>
</excludes>
</resource>
</resources>
<plugins>
<!-- 更改maven默认的打包目录 -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warSourceDirectory>webapp</warSourceDirectory>
<webXml>webapp\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
</plugins>
</build>
其中${package.env}就是profile里定义的properties,打包的时候使用-P <profile>指定需要打哪个环境的包。
打包的时候使用-P <profile>指定需要打哪个环境的包。
比如打开发包
打包成功后,如下图