目标

讲解Maven多环境下,多套配置文件下,如何区别不同环境来,使用mvn命令来打包。

背景

在做项目开时会有多种环境,如:开发环境、测试环境、生产环境,不同环境的配置文件不同。

我们的工程要运行起来,也要使用与环境配套的配置文件。

把在启动时、打包发布时,都要手动根据环境更改配置文件内容,达到适应环境,成功运行的目标。

这是人工操作,麻烦、容易出错。需要一个工程化的解决办法。

解决方案

采用maven多环境技术,为每个环境准备一份独立的配置文件。

利用Maven插件在打包时,根据打包命令的“环境参数”自动取对应环境的配置文件打到war包、ja包中,减少人工干预的部分,工程化的解决“多环境”问题。

我们会用到maven-war-plugin这个插件。

多环境配置文件

# 在src/main/resources目录下建立各个环境的专用的文件夹,文件来个放各个环境的专用的配置文件
# env-cn 中文商城开发环境,内有本环境专用的配置文件
# env-en 英文商城开发环境,内有本环境专用的配置文件

src/main/resources/fdp.properties 配置文件是是一个空文件。放在这里是表意说这里需要一个真正的配置文件。

使用mvn命令 打包时区别多环境

# 打包命令
# 用Eclipse、IntelliJ IDEA等集成开发环境来打包
# 打包命令: clean compile -U -D maven.test.skip=true -P env-cn package 【打env-cn环境的包 (最常用)】
# 打包命令:clean compile -U -D maven.test.skip=true -P env-en package 【打env-en环境的包】

# 使用mvn命令来打包
# 打包命令: mvn clean compile -U -D maven.test.skip=true -P env-cn package 【打env-cn环境的包(最常用)】
# 打包命令:mvn clean compile -U -D maven.test.skip=true -P env-en package 【打env-en环境的包】



# 验证
# 在工程中进入target目录,这是存放输出的目录有打出的jar包war包。

# 原理讲解
# 当使用clean compile -P env-en package 命令打war包时, -P env-en 表示打env-en环境的包,就会使用env-en文件夹的中的配置文件,替换WEB-INF/classes下的同名文件,实现了打包时区分各个环境。
# 当使用clean compile -P env-cn package 命令打war包时, -P env-cn 表示打env-cn环境的包,就会使用env-cn文件夹的中的配置文件,替换WEB-INF/classes下的同名文件,但env-cn下无文件,就没有替换。使用的还是开发环境的配置文件。


使用IEDA(集成开发环境) 打包时区别多环境

如何手动切换环境

在日常开发,当你需要手动切换环境时,请按下图操作就可,简单易用。

1、如下图:在Maven视图中–配置文件,可见配置好的3个环境,手动勾选就可切换。

2、再点这个“编译”按钮,或Ctrl+F9执行编译,都可使切换环境生效。

注意:如上操作99%会生效的,当遇到不效时,请先执行maven清理命令clean,再点此按钮会100%切换环境生效,我测试了N多回了,请放心。

保证100%生效的方法:执行maven命令clean compile -Dmaven.test.skip=true,意思是:清理 + 编译 + 并使用1处选择环境, 可100%切换环境生效

细节:

  1. clean compile -Penv-prod -Dmaven.test.skip=true  命令自动加上 手动勾选的环境(-P a-sc,env-prod)
  2. 我就不按套路操作,我就不勾选, 将使用默认环境,是在pom.xml中由<activeByDefault>true</activeByDefault>指定的就是默认环境。
  3. 我就不按套路操作,手工勾选了env-prod环境,但我在maven命令再加一个-Penv-test环境参数,下达矛盾的命令看你Maven蒙不蒙?例如:clean compile -Penv-test package -Dmaven.test.skip=true,实际执行的命令是: clean compile -Penv-test package -Dmaven.test.skip=true -P a-sc,env-prod ,最后,重复的-P参数是最后一个生效,也就是 -P env-prod 生效。

验证

在Eclipse中,进入target目录,这是存放mvc输出的目录,查看文件夹中的文件,包含的配置文件是不是你想要的某个环境专用的配置文件。

在IDEA中,进入编译输出目录 ,C:\xxx\工程名\shop-data\src\main\webapp\WEB-INF\classes   查看文件夹中的文件,包含的配置文件是不是你想要的某个环境专用的配置文件。