Maven为本地、测试、生产等不同的环境打包

大家在项目开发中经常碰到这样的情况,每个项目都会有多套运行环境,比如开发环境、测试环境、生产环境等,不同的环境对应的配置也不尽相同,比如说数据库连接、文件路径、WebServices address等。    
不同环境下需要构建不同的包,那么我们可以通过以下两种方式来解决:

一、定义多个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>指定需要打哪个环境的包。 
比如打开发包
打包成功后,如下图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值