您的位置:首页 > 编程语言 > Java开发

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

2016-12-02 11:38 621 查看
大家在项目开发中经常碰到这样的情况,每个项目都会有多套运行环境,比如开发环境、测试环境、生产环境等,不同的环境对应的配置也不尽相同,比如说数据库连接、文件路径、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.xmlBuild 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>指定需要打哪个环境的包。 

比如打开发包



打包成功后,如下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息