Maven Filter与Profile隔离生产环境与开发环境
Maven Filter与Profile隔离生产环境与开发环境
在不同的开发阶段,我们一般用到不同的环境,开发阶段使用开发环境的一套东西,测试环境使用测试环境的东西,可能有多个测试环境,生产环境使用的是另外一套,生产环境要求是最严格的。
不同环境,所需要的服务器地址,数据库,缓存,配置中心等配置一般不同,如果每次切换环境都要手动修改,那就太麻烦了,好在使用Maven可以帮我们做这些事情。
介绍
- Filter: 过滤,一般配合maven resource插件使用,可以替换maven资源目录下的文本文件中变量为我们设置的值,变量使用${}包起来。
- Profile: 侧面,可以理解为某个角度,盲人摸象角度不同得出的结论也不同,配置不同的profile,就像从不同的角度看待一个东西,得出的结果不一样。在开发中指:“环境”
案例
Filter的使用
新建一个maven项目,现在IDE新建项目步骤都非常简单
在resource目录下新建一个任意文件,我们新建文件名为 application.properties文件,内容只有一行
app.name=${maven.app.name}
在main目录下新建filters目录,然后新建一个dev.properties文件,里面也只有一行内容,如下:
maven.app.name=aihe-dev
配置pom.xml,编译部分如下:
<build>
<filters>
<!-- 指定过滤变量的位置 -->
<filter>src/main/filters/dev.properties</filter>
</filters>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<!-- 使用默认的变量标记方法即${*} -->
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins> <resources>
<resource>
<directory>src/main/resources</directory>
<!-- 启用过滤 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
现在的目录结构如下:

编译运行查看效果。
mavn clean compile

profile使用
- 上面我们可以看到,filter是生效的,但是如果只是这样用,那么功能太简单了点,所以还要加上profile.
- 修改pom.xml,并且添加profile,我们配置了两个profile,一个dev默认是激活状态,一个pro
<build>
<filters>
<!-- 指定过滤变量的位置 -->
<filter>src/main/filters/${env}.properties</filter>
</filters>
<!-- ...与刚才的内容相同 -->
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>
添加pro.properties,key和dev.properties中的key相同,内容如下:
maven.app.name=aihe-pro
运行查看效果,maven命令行的-P参数指定使用profile
// 指定profile为pro时候,可以看到application.properties文件中的内容为maven.app.name=aihe-pro
mvn clean compile -P pro
//profile为dev的时候,文件中的内容为maven.app.name=aihe-dev
mvn clean compile -P dev
到这一步基本完事,在实际开发中涉及的环境比较多就多配置几个,这是当前项目配置的环境,好几个

结束
maven作为常用的工程化管理工具,常见的开发功能还是有必要掌握的
Maven Filter与Profile隔离生产环境与开发环境的更多相关文章
- 通过Maven配置测试环境和开发环境连接不同的数据库
通过Maven配置测试环境和开发环境连接不同的数据库 作者及来源: 通灵宝玉 - 博客园 收藏到→_→: 此文来自: 马开东博客 网址:http://www.makaidong.com ...
- maven(多个模块)项目 部署 开发环境 问题处理历程【异常Name jdbc is not bound in this Context 异常java.lang.NoSuchMethodE】
maven(多个模块)项目 部署 开发环境 问题处理历程[异常Name jdbc is not bound in this Context 异常java.lang.NoSuchMethodE] 201 ...
- (17/24) webpack实战技巧:生产环境和开发环境并行设置,实现来回切换
1. 概述 生产环境和开发环境所需依赖是不同: --开发依赖:就是开发中用到而发布时用不到的.在package.json里面对应的就是devDependencies下面相关配置. --生产依赖: 就是 ...
- 【webpack学习笔记】a06-生产环境和开发环境配置
生产环境和开发环境的配置目标不一样,生产环境主要是让文件压缩得更小,更优化资源,改善加载时间. 而开发环境,主要是要开发更方便,更节省时间,比如调试比如自动刷新. 所以可以分开配置不同的开发环境,然后 ...
- Android 程序分析环境搭建-开发环境搭建
1.1 JDK 安装 JDK 的配置,初学java 开发,那是必须会的. 下载,遇到的问题就是要注册oracle 的账号,还有你要下载特定版本,比如jdk 1.7,jdk 1.6,很难找到在哪里.解 ...
- Eclipse Maven profiles 多环境配置,测试环境与开发环境分开打包
1.将开发环境.测试环境.生产环境的配置文件分开存放,如下图: 2.在Maven中配置不同的环境打包配置文件的路径,配置如下: <profiles> <profile> < ...
- spring boot区分生产环境和开发环境
回顾一下spring boot使用基础,做个笔记. 通过配置文件,设置项目的开发环境和生成环境. 项目目录结构: application-dev.yml是开发环境配置文件,application-pr ...
- 配置动态加载模块和js分模块打包,生产环境和开发环境公共常量配置
1. 话不多少 先上代码: route.js // 引用模板 分模块编译 const main = r => require.ensure([], () => r(require('. ...
- springboot 生产环境与开发环境配置
通过修改yml文件里的active属性,prod(生产环境) 与 dev (开发环境)
随机推荐
- BZOJ 1233 干草堆 (单调队列优化DP)
$ BZOJ~1233~~ $ 干草堆: (题目特殊性质) $ solution: $ 很妙的一道题目,开始看了一眼觉得是个傻逼贪心,从后往前当前层能多短就多短,尽量节省花费.但是这是DP专题,怎么会 ...
- mybaties数据源配置类型(POOLED、JNDI、UNPOOLED)
dataSource的类型可以配置成其内置类型之一,如UNPOOLED.POOLED.JNDI. 如果将类型设置成UNPOOLED,mybaties会为每一个数据库操作创建一个新的连接,并关闭它.该方 ...
- RAC搭建---自己做
一.本地磁盘是指你本身加上去的磁盘,只能本机使用的.共享磁盘是指可以多台机器同时读取写入.你做RAC就要用到共享存储: 二.ORC分区一般1G*3 数据分区5G*3 ,FRA分区一般5G*3 这 ...
- frugally-deep: Header-only library for using Keras models in C++
// Convenience wrapper around predict for models with // single tensor outputs of shape (1, 1, 1), / ...
- dubbo、web应用 项目结构以及发布目录结构
一.dubbo服务项目结构及发布结构 dubbo 服务项目结构 xxxxx-api 接口类和一些DTO 用于供其他项目依赖 需要提供dubbo服务的接口命名 以Facade结尾 (xxxxxFacad ...
- Linux学习-基于CentOS7的ProxySQL实现读写分离
一.实验环境 主机:3台,一台ProxySQL(192.168.214.37),两台主从复制,master(192.168.214.17),slave(192.168.214.27) 系统:CentO ...
- [AGC001E]BBQ Hard 组合数学
题目描述 Snuke is having another barbeque party. This time, he will make one serving of Skewer Meal. He ...
- B/S大文件断点续传
一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...
- Cluster基础(一):配置iSCSI服务、编写udev规则、配置并访问NFS共享、部署Multipath多路径环境
一.配置iSCSI服务 目标: 本案例要求先搭建好一台iSCSI服务器,并将整个磁盘共享给客户端: 虚拟机添加新的磁盘 将新添加的磁盘分区并创建两个逻辑卷 逻辑卷名称分别为:/dev/myvg/isc ...
- Prefix
Prefix 南昌邀请赛的题,字典树 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll A[]; ...