开发项目时会遇到这个问题:开发环境,测试环境,生产环境的配置文件不同,打包时经常要手动更改配置文件,更改的少还可以接受,但是如果需要更多个配置文件,手动的方法就显得非常笨重了。

下面介绍一种方法,利用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根据不同环境打包不同配置文件相关推荐

  1. Maven实现多环境打包

    Maven实现多环境打包 撸起袖子便是干: 目录如下: 不同目录自己写入文件及内容加以区分. pom.xml如下: <project xmlns="http://maven.apach ...

  2. maven多profile环境打包下-P参数和-D参数

    P代表(Profiles配置文件) 在指定的中,可以通过-P进行传递或者赋值. 假如pom.xml如下 <profiles><profile><id>prod< ...

  3. maven 排除配置文件打包_Maven打包pom里面配置exclude 排除掉环境相关的配置文件...

    Maven打包pom里面配置exclude 排除掉环境相关的配置文件 有几种方式: 1. 打包时,指定环境参数把环境的配置文件复制过去 2. 不打包所有的环境相关的配置文件,直接由运维的人维护 可以在 ...

  4. 用maven按环境打包SpringBoot的不同配置文件

    利用maven按环境打包SpringBoot的不同配置文件 application-dev.properties对应开发环境 application-test.properties对应测试环境 app ...

  5. Maven打包pom里面配置exclude 排除掉环境相关的配置文件

    Maven打包pom里面配置exclude 排除掉环境相关的配置文件, resources excludes 关于Maven resource配制中include与exclude的关系 <inc ...

  6. maven 排除配置文件打包_maven 打包排除配置文件

    如果你想通过pom.xml文件的配置实现的话,你可以这样 1.打jar包时过滤配置文件 src/main/resources **/* true .............. 2.在plugins中添 ...

  7. maven使用assembly插件打包,剥离配置文件,加入可执行的脚本用来启动应用

    通过使用maven的assembly插件,可以按照我们自定义的要求生成包,比如将配置文件剥离到独立的目录中,加入sh,bat脚本以便在Linux或Windows上通过执行脚本来启动项目. 首先,在项目 ...

  8. maven 根据环境打包

    系统中有很多的配置数据需要在配置文件中,咱们总不能全部写在application.yml中,即使写了application-dev.yml,application-test.yml,applicati ...

  9. springboot-21-maven多环境打包

    前几天项目需要用到分环境打包, 于是研究了下, 由于项目基于springboot的, 所以分两个情况进行说明: 1), springboot的多环境配置 2), maven-springboot的多环 ...

最新文章

  1. 机器学习XGBoost——后面的明天更
  2. Script:Speed Up Large Index Create or Rebuild
  3. 如何用html5定位,如何利用html5进行地理定位
  4. google提供的adb工具包_开源化学信息学工具包(Open Access Cheminformatics Toolkits)
  5. 顶层 pom 中的 dependencies 与 dependencyManagement 区别
  6. mysql.data.dll win10_【MySQL】Windows10下安装
  7. Maven学习(八)-----Maven依赖机制
  8. Quartz调度源码分析
  9. mysql5驱动_技术分享 | MySQL 8 和 MySQL 5.7 在小型设备的内存消耗分析
  10. c# abstract抽象类与继承类子类的构造函数_base
  11. vim的ex模式介绍
  12. 【Android -- 技术周刊】第 021 期
  13. 基于marlin固件的SCARA机器人
  14. Javac源码简单分析之解析和填充符号表
  15. 13个适合上班时做的保健小动作
  16. 漫谈数据结构系列(一)之僧敲月下门
  17. 深度学习词汇表(一)
  18. 量化进阶——为何需要进行量化对冲
  19. 百度正式发布搜索推广专业版凤巢系统
  20. MatLab中rand randi randn 三个函数的解析

热门文章

  1. OpenGL基于PBR的irradiance辐照度的实例
  2. OpenGL Multi-Indirect Draw小行星的实例
  3. QT的QDesignerFormWindowInterface类的使用
  4. QT的QCullFace类的使用
  5. C++ Opengl 3D世界源码
  6. C++与QML逻辑分离
  7. C++11新特性decltype
  8. iphone微信美颜插件_iPhone、安卓微信自动更新,又有新功能?
  9. 'gbk' codec can't decode byte 0x80 in position的一个解决办法
  10. Apache Ranger、业务背景、现状与需求、大数据安全组件介绍与对别、系统架构及实践、ranger admin、UserSync、plugin、权限模型、权限实现等