pom中的resources设置
Maven项目中一般都会把配置文件放到src/main/resources目录下,有时为了满足多个环境打包发布,可能会创建一些自定义目录来放置各环境的配置文件,如:src/main/profile/dev(prod)。以上这些资源文件需要在maven的resources对其进行的配置。(如果没有自定义目录,并且resources目录下的文件也无需特殊处理,比如过滤的情况下,可以不设置)
resources配置一般如下:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/profile/${profiles.active}</directory>
<filtering>false</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<excludes>
<exclude>*.yml</exclude>
</excludes>
</resource>
</resources>
</build>
配置中一共有两个resource,分别用来设置项目中的两个配置文件目录。
第一个resource配置src/main/resources目录,includes中的内容表示此目录下所有以.properties、xml结尾的文件会在package时会当做资源文件打包(放在classpath下)include可设置多条,目录下规则之外的其他文件会被忽略。
第二个resourcee配置src/main/profile/${profiles.active}目录,${profiles.active}是一个变量,在这个例子中这个变量是一个表示当前环境的字符串,如dev或者prod,至于这个变量如何设置我们后面会说到。includes解释同上不赘述。excludes中可指定此目录满足exclude规则的文件不打包(本例子中以yml结尾的文件不打包),exclude规则可设置多个。
true表示resource规则选中的文件中如果有类似${key}这样的配置,就会根据maven的配置进行覆盖,使用真实值来代替${key},至于真实值如何来,后面会具体讲。false表示不替换。
如果在同一个resource中的和规则发生冲突,以为准。如果、和都不配置,就是把directory下的所有配置文件都放到classpath下,不一样的文件取并集。这样配合下面讲的profiles也可以实现各种不同环境的自动切换。
${profiles.active}以及前面讲到被过滤的文件中的${key}会被真实值置,这些真实值来自哪里呢?
这些真实值其实都来自于profiles的配置里面,如下
<profiles>
<profile>
<id>localhost</id>
<properties>
<profiles.active>localhost</profiles.active>
<app_name>local_app</app_name>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>development</id>
<properties>
<profiles.active>development</profiles.active>
<app_name>dev_app</app_name>
</properties>
</profile>
<profile>
<id>production</id>
<properties>
<profiles.active>production</profiles.active>
<app_name>prod_app</app_name>
</properties>
</profile>
</profiles>
这段配置结合文章开头的配置,假设为development环境打包:
命令如下:
mvn clean package -Pdevelopment(利用id=development的profile配置打包)
${profiles.active}会被替换为development,maven会根据中设定的规则从src/main/profile/development目录下筛选出文件打包到classpath下,并把需要过滤的文件(true)中的${app_name}使用dev_app替换,其他占位符同理。利用这种特性也可以实现各种不同环境的自动切换,只要在打包时指定使用哪个profile即可:
mvn clean package -Pdevelopment
若是配置信息比较多,可能导致需要配置很多项,pom文件会看起来不够简洁,这时可以利用profile的另外一个节点属性filter,它可以指定文件,并使用指定文件中的配置信息来替换过滤文件的占位符。配置如下:
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>src/main/resources/profiles/dev/config.properties</filter>
</filters>
</build>
</profile>
当然你有可以按下面设置也是可以的:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/profile/${profiles.active}</directory>
<filtering>false</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<excludes>
<exclude>*.yml</exclude>
</excludes>
</resource>
</resources>
<filter>src/main/resources/profiles/${profiles.active}/config.properties</filter>
</build>
pom中的resources设置的更多相关文章
- maven pom 中的 build——resources 标签 mybatis加载mapper类及.xml文件
转: maven 理解 2017年12月18日 15:34:31 feicongcong 阅读数:5658 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...
- Android中的颜色设置
1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...
- 21)pom 中的缺省值(default properties)
1 引言 项目中build 时用到了maven-jar-plugin ,其中有一个 ${project.build.directory} <plugin> <artifactId&g ...
- 【转】Android中的颜色设置
原文网址:http://www.cnblogs.com/bluestorm/p/3644669.html 1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如: 1 2 3 publ ...
- (转)Maven POM中的各种scope的行为总结
原地址:https://blog.csdn.net/cnweike/article/details/52221410 compile:默认的scope.任何定义在compile scope下的依赖将会 ...
- Maven POM中的各种scope的行为总结
compile:默认的scope.任何定义在compile scope下的依赖将会在所有的class paths下可用.maven工程会将其打包到最终的artifact中.如果你构建一个WAR类型的a ...
- Maven工程pom中定义jdk版本
今天把之前做的项目导进eclipse,然后发现报错,一些类在1.6中不支持,需要将JDK版本设置为1.7,我直接通过eclipse中的提示进行更改,然后update project一下,发现又回到了S ...
- 转-ArcGIS Engine中的License设置
AE开发中的License有两种方法进行设置,一种是通过LicenseControl控件,另一种是通过IAoInitialize接口设置.整个应用程序中只能有一种方式存在,如果进行了两种License ...
- 请将 php.ini 中的 short_open_tag 设置为 On,否则无法继续安装。
安装的wamp套件,访问http://localhost/Discuz/install/index.PHP进行安装操作,提示 对不起,请将 php.ini 中的 short_open_tag 设置为 ...
随机推荐
- Java小吐槽
简单说明,所有小吐槽都基于我的.NET经验,作为Java初学者,肯定有贻笑大方之处,欢迎之处,共同学习,共同进步. 1. The public type XXXXXXXX must be define ...
- c#按钮如何避免重复点击后报错
前言:感谢51·halcon的绝地武士大佬啊,虽然你不认识我,但是我从你那学到了很多知识,真的感谢您对知识的无私传播哈哈(两天一个博客有在坚持的,都是草稿,等这个实习阶段过去了再回来整理博客~) bt ...
- c#winform初学习
不用思维导图了直接拍照笔记吧..参考视频:传智播客.net第十四天,参考图书c#图解教程第四版(人民邮电出版社) 对对象初始化赋值 工具箱中的每一个控件都相当于一个类 在窗体中拖一个控件就相当于new ...
- java设计模式——桥接模式
一. 定义与类型 定义:将抽象部分与他的具体实现部分分离,使它们都可以独立的变化,通过组合的方式建立两个类之间的联系,而不是继承 类型:结构性. 二. 使用场景 (1) 抽象和具体实现之间增加更多的灵 ...
- 第42章 电源管理—实现低功耗—零死角玩转STM32-F429系列
第42章 电源管理—实现低功耗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- C#流程控制语句
C#流程控制语句 一.选择语句 当程序中需要进行两个或两个以上的选择时,可以根据条件的判断来选择将要执行的一组语句. ?if语句 ?switch语句 二.循环语句 循环语句是对一个程序模块进行的重复操 ...
- python3 井字棋 GUI - 人机对战、机器对战 (threading、tkinter库)
python3 井字棋 GUI - 人机对战.机器对战 功能 GUI界面 人机对战(可选择机器先走) 机器对战(50局) 流程图 内核 棋盘 [0][1][2] [3][4][5] [6][7][8] ...
- 局域网内使用ssh连接两台计算机总结
因为家里有两台电脑,一个centos7 系统,一个Mac,都是笔记本,感觉两个拿来拿去的用太麻烦了,所以就想用ssh连接cenots7 的电脑,这样就没那么麻烦了.欢迎大家指正 配置静态ip cent ...
- 8-1 python 接口开发(提供数据、返回session_id)
1.接口开发,根据不同查询条件返回数据库查询结果 import flask import tools import json server = flask.Flask(__name__) #新建一个服 ...
- Cluster - HA -keepalived
学习须知 VRRP:https://www.cnblogs.com/aftree/p/9376427.html 需求 集群中,对后端RealServer的状态做检测,实现自动化问题检测和问题自动处理机 ...