Maven根据不同环境打包不同配置文件
开发项目时会遇到这个问题:开发环境,测试环境,生产环境的配置文件不同,打包时经常要手动更改配置文件,更改的少还可以接受,但是如果需要更多个配置文件,手动的方法就显得非常笨重了。
下面介绍一种方法,利用Maven插件来打包不同环境的配置文件。我们用到的是maven-war-plugin这个插件。
首先贴出整个pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>CMS</groupId><artifactId>CMS</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>Cms</name><url>http://maven.apache.org</url><properties><spring.version>4.1.6.RELEASE</spring.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies>
<!-- 依赖省略--></dependencies>
<profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><package.environment>dev</package.environment></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><!-- 测试环境 --><id>test</id><properties><package.environment>test</package.environment></properties></profile><profile><!-- 生产环境 --><id>prod</id><properties><package.environment>prod</package.environment></properties></profile></profiles><build><finalName>Cms</finalName><sourceDirectory>src</sourceDirectory><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.1.1</version><configuration><webXml>WebRoot\WEB-INF\web.xml</webXml><warSourceDirectory>WebRoot</warSourceDirectory><archive><addMavenDescriptor>false</addMavenDescriptor></archive><warName>Cms</warName><webResources><resource><directory>src/main/resoreces/${package.environment}</directory><targetPath>WEB-INF/classes</targetPath><filtering>true</filtering></resource></webResources></configuration></plugin></plugins><resources><resource><directory>src</directory><filtering>true</filtering><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource></resources></build>
</project>
简单说明几个地方:
<profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><package.environment>dev</package.environment></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><!-- 测试环境 --><id>test</id><properties><package.environment>test</package.environment></properties></profile><profile><!-- 生产环境 --><id>prod</id><properties><package.environment>prod</package.environment></properties></profile>
</profiles>
此处借助profiles定义几个不同的环境文件夹,相同的需要在项目里面创建同id的文件夹,用来存放特定环境的配置文件。
我之前的resource目录:
我的目录结构是相对复杂的一种有2层目录,只有一层目录的也一样更简单。外层xml文件,还有一个properties文件夹。这里我针对不同环境需要更改的配置文件有4个,标红的。
再看一下改造后resource的目录结构:
随便展开一个dev文件夹是这样:
可见需要更改的配置文件,需要copy到各个环境的文件夹当中去,而不需要更改的文件,则不需要复制一份。
此处需要说明的是,如果我指定的是dev,则maven会将dev下的所有文件拿出来,db.xml覆盖掉外面的db.xml,dev.properties文件夹中的配置文件会拿出来放到外面的properties文件夹中。所以说这里是非常灵活的,你需要哪些文件定制,完全由自己来控制。
再来看pom文件
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.1.1</version><configuration><webXml>WebRoot\WEB-INF\web.xml</webXml><warSourceDirectory>WebRoot</warSourceDirectory><archive><addMavenDescriptor>false</addMavenDescriptor></archive><warName>test</warName><webResources><resource><directory>src/main/resources/${package.environment}</directory><targetPath>WEB-INF/classes</targetPath><filtering>true</filtering></resource></webResources></configuration>
</plugin>
这里使用的是
maven-war-plugin
这个插件,此插件的功能是很强大的,想深入了解,可以到官网去看。
${package.environment}
动态指定目录,接收参数。
targetPath
目标路径。
另外说2点,这两个标签
<webXml>WebRoot\WEB-INF\web.xml</webXml>
<warSourceDirectory>WebRoot</warSourceDirectory>
1.如果maven打包错误说找不到web.xml,说明你得项目结构不是标准的,用webxml标签指定一下就可以了
2.如果jsp打包没有的话,同样的问题,指定一下目录,我的项目结构就不是maven标准结构,所以需要指定一下。
改造完毕,接下来就是利用maven打包了。
mvn clean ; mvn compile;
mvn -P test package; 传相应环境参数就ok了
Maven根据不同环境打包不同配置文件相关推荐
- Maven实现多环境打包
Maven实现多环境打包 撸起袖子便是干: 目录如下: 不同目录自己写入文件及内容加以区分. pom.xml如下: <project xmlns="http://maven.apach ...
- maven多profile环境打包下-P参数和-D参数
P代表(Profiles配置文件) 在指定的中,可以通过-P进行传递或者赋值. 假如pom.xml如下 <profiles><profile><id>prod< ...
- maven 排除配置文件打包_Maven打包pom里面配置exclude 排除掉环境相关的配置文件...
Maven打包pom里面配置exclude 排除掉环境相关的配置文件 有几种方式: 1. 打包时,指定环境参数把环境的配置文件复制过去 2. 不打包所有的环境相关的配置文件,直接由运维的人维护 可以在 ...
- 用maven按环境打包SpringBoot的不同配置文件
利用maven按环境打包SpringBoot的不同配置文件 application-dev.properties对应开发环境 application-test.properties对应测试环境 app ...
- Maven打包pom里面配置exclude 排除掉环境相关的配置文件
Maven打包pom里面配置exclude 排除掉环境相关的配置文件, resources excludes 关于Maven resource配制中include与exclude的关系 <inc ...
- maven 排除配置文件打包_maven 打包排除配置文件
如果你想通过pom.xml文件的配置实现的话,你可以这样 1.打jar包时过滤配置文件 src/main/resources **/* true .............. 2.在plugins中添 ...
- maven使用assembly插件打包,剥离配置文件,加入可执行的脚本用来启动应用
通过使用maven的assembly插件,可以按照我们自定义的要求生成包,比如将配置文件剥离到独立的目录中,加入sh,bat脚本以便在Linux或Windows上通过执行脚本来启动项目. 首先,在项目 ...
- maven 根据环境打包
系统中有很多的配置数据需要在配置文件中,咱们总不能全部写在application.yml中,即使写了application-dev.yml,application-test.yml,applicati ...
- springboot-21-maven多环境打包
前几天项目需要用到分环境打包, 于是研究了下, 由于项目基于springboot的, 所以分两个情况进行说明: 1), springboot的多环境配置 2), maven-springboot的多环 ...
最新文章
- 机器学习XGBoost——后面的明天更
- Script:Speed Up Large Index Create or Rebuild
- 如何用html5定位,如何利用html5进行地理定位
- google提供的adb工具包_开源化学信息学工具包(Open Access Cheminformatics Toolkits)
- 顶层 pom 中的 dependencies 与 dependencyManagement 区别
- mysql.data.dll win10_【MySQL】Windows10下安装
- Maven学习(八)-----Maven依赖机制
- Quartz调度源码分析
- mysql5驱动_技术分享 | MySQL 8 和 MySQL 5.7 在小型设备的内存消耗分析
- c# abstract抽象类与继承类子类的构造函数_base
- vim的ex模式介绍
- 【Android -- 技术周刊】第 021 期
- 基于marlin固件的SCARA机器人
- Javac源码简单分析之解析和填充符号表
- 13个适合上班时做的保健小动作
- 漫谈数据结构系列(一)之僧敲月下门
- 深度学习词汇表(一)
- 量化进阶——为何需要进行量化对冲
- 百度正式发布搜索推广专业版凤巢系统
- MatLab中rand randi randn 三个函数的解析
热门文章
- OpenGL基于PBR的irradiance辐照度的实例
- OpenGL Multi-Indirect Draw小行星的实例
- QT的QDesignerFormWindowInterface类的使用
- QT的QCullFace类的使用
- C++ Opengl 3D世界源码
- C++与QML逻辑分离
- C++11新特性decltype
- iphone微信美颜插件_iPhone、安卓微信自动更新,又有新功能?
- 'gbk' codec can't decode byte 0x80 in position的一个解决办法
- Apache Ranger、业务背景、现状与需求、大数据安全组件介绍与对别、系统架构及实践、ranger admin、UserSync、plugin、权限模型、权限实现等