Maven里面多环境下的属性过滤(配置)
情景:通常一个项目都为分为开发环境(dev)和测试环境(test)还有正式环境(prod),如果每次一打包都要手动地去更改配置文件,例如数据库连接配置。将会很容易出差错。
解决方案:maven profiles。maven提供了profiles元素让开发者们可以定义相关的变量的值,然后在打包的时候根据profile的id去选择变量写入配置文件中。
例如:
配置文件jdbc.proterties里面的内容:
name=${pom.name}
password=${pom.password}
pom.xml 里面的profiles内容:
<profiles>
<profile>
<id>dev</id>
<properties>
<pom.name>dev</pom.name>
<pom.password>123456</pom.password>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<pom.name>test</pom.name>
<pom.password>1.1</pom.password>
</properties>
</profile>
</profiles> 当使用maven命令打包的时候,在命令后加 -P dev 例如:mvn package -P dev 。这时候maven就会选择profile的id是dev的里面的变量写入到jdbc.properties里面。 大概过程就是这样,下面写写重点:
问题:为什么会写入jdbc.properties文件而不是application.properties或者web.xml文件呢。
答案:因为还需要在pom文件里面的build标签下配置filter标签,内容如下:
<filters>
<filter>src/main/resources/jdbc.properties</filter>
</filters> 还需要配置resource标签,这个标签标明需要被过滤的资源文件,内容如下: <resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources> 这个标签的意思就是说资源文件放在 directory 配置的目录下,并且开启了过滤模式,表示为遇到filters里面的文件的时候就改变里面的el表达式变量。
整个pom文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>dubbo-learn</artifactId>
<groupId>com.learn.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>maven-profiles</artifactId>
<build>
<filters>
<filter>src/main/resources/jdbc.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<pom.name>dev</pom.name>
<pom.password>123456</pom.password>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<pom.name>test</pom.name>
<pom.password>1.1</pom.password>
</properties>
</profile>
</profiles>
</project> 注意:filters里面的文件都只能是文件的全名不能是 *.properties这样的格式。否则会报错。如果想要同表达式匹配指定的文件。
可以使用resource里面的include标签,修改不使用filters而使用include后的文件为:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>dubbo-learn</artifactId>
<groupId>com.learn.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>maven-profiles</artifactId>
<build>
<!-- <filters>
<filter>src/main/resources/application.properties</filter>
</filters>-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<pom.name>dev</pom.name>
<pom.password>123456</pom.password>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<pom.name>test</pom.name>
<pom.password>123456</pom.password>
</properties>
</profile>
</profiles>
</project>
有机会再讲讲include和exclude的内容。晚安
Maven里面多环境下的属性过滤(配置)的更多相关文章
- [转]Maven中profile和filtering实现多个环境下的属性过滤
背景 项目构建的时候,需要根据不同的场景来改变项目中的属性资源,最为常见的莫过于数据库连接配置了,试想有生产环境.测试缓存.发布环境等,需要为不同的场景下来动态的改变数据库的连接配置.而使用maven ...
- maven在windows环境下加载settings.xml文件
今天发现maven在windows环境下加载的settings.xml文件是c:下的,就算修改conf下的settings.xml里的<localRepository>给他明确指向也没用.
- libCURL开源库在VS2010环境下编译安装,配置详解
libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...
- Linux/CentOS环境下如何安装和配置PhantomJS工作环境
PhantomJS 是一个基于WebKit的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, C ...
- 联想电脑win7旗舰版环境下的如何成功配置AppServ
联想电脑win7旗舰版环境下的如何成功配置AppServ 毕业设计中需要用Mysql数据库,并且想找一个方便Mysql数据库编程的开发工具,百度搜索了一下,AppServ集成环境安装包能快速搭建环境. ...
- 实验七:Xen环境下cirrOS的安装配置
实验名称: Xen环境下cirrOS的安装配置 实验环境: 这里的cirrOS和实验六中的busybox的启动方式相同,唯一的区别就是我们使用的cirrOS镜像中,已经包含了根文件系统.内核文件以及r ...
- 【转】mysql8.0 在window环境下的部署与配置
[转]mysql8.0 在window环境下的部署与配置 今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置 ...
- Linux环境下NodeJS的安装配置(HelloWorld)
Linux环境下NodeJS的安装配置(HelloWorld) 最简单的环境安装,测试helloworld.给初学者!! 安装脚本,请仔细阅读逐行执行: #!/bin/bash #检查是否已经安装 r ...
- GITHUB个人博客搭建-Pelican 在Windows环境下的安装及配置
GITHUB个人博客搭建-Pelican 在Windows环境下的安装及配置 前言 此篇博客主要为Pelican在Windows平台下的配置安装所写,在此过程中主要参考资料烟雨林博客.poem_of_ ...
随机推荐
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- stark——快速过滤list_filter
一.获取过滤字段 1.给自定义配置类配置list_filter app01/stark.py: class BookConfig(ModelStark): list_display = [" ...
- Popularize what is heart of mobile phone?
From: http://tech.sina.com.cn/mobile/n/2014-09-29/08399657494.shtml 只谈核数没意义 带你重新认识手机SoC 2014年09月29日 ...
- SCI收录的期刊查询
SCI 收录的期刊查询(动态) 1.Science Citation Index (SCI)收录期刊查询地址:http://www.isinet.com/cgi-bin/jrnlst/jlopti ...
- JSP初学者3
reponse代表服务器对客户端的响应.大部分时候,程序无须使用response来响应客户端请求,因为有更简单的响应对象——out,它代表页面输出流. 但out无法响应生成非字符内容(out是JspW ...
- windows RT开发笔记:WinRT DLL及其调用研究
一. 几个概念: WinRT : Windows Runtime, windows运行时.创建Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验.WinRT会 ...
- file中mkdirs和mkdir的区别-文件上传
mkdirs()可以建立多级文件夹, mkdir()只会建立一级的文件夹, 如下: new File("/tmp/one/two/three").mkdirs(); 执行后, 会建 ...
- tensorflow 模型不兼容
[ERROR] [1533570199.196157]: bad callback: <bound method TLDetector.image_cb of <__main__.TLDe ...
- Hello World, S/4HANA for Customer Management 1.0
SAP CRM的前世今生 在我之前的微信公众号文章 SAP的这三款CRM解决方案,您能区分清楚么我曾经提到过我作为成都SAP研究院CRM产品开发团队的一员工作过一段时间. 我向在SAP德国总部工作的德 ...
- HTML中什么时候加px
如:<img width="800" height="600" src="#"/> 不加后面的px; #center{ ...