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

来源:互联网 发布:手机小夜灯软件 编辑:程序博客网 时间:2024/05/17 08:46
大家在项目开发中经常碰到这样的情况,每个项目都会有多套运行环境,比如开发环境、测试环境、生产环境等,不同的环境对应的配置也不尽相同,比如说数据库连接、文件路径、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>指定需要打哪个环境的包。 
比如打开发包
打包成功后,如下图


1 0
原创粉丝点击