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 设置为 ...
随机推荐
- [论文理解]关于ResNet的进一步理解
[论文理解]关于ResNet的理解 这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考. 要解决什么问题 论文的一大贡 ...
- python 爬取猫眼榜单100(二)--多个页面以及多进程
#!/usr/bin/env python # -*- coding: utf- -*- # @Author: Dang Kai # @Date: -- :: # @Last Modified tim ...
- 软件架构中的SOA架构有哪些特点?
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. SOA是一 ...
- EF 连接数据库 Mysql (database first ) 一个表对应一个模型
准备工作 1.下载vs2015 2.下载mysql2017 3.安装 1.创建数据库 2. 将数据库映射成模型 3创建aspx 文件. 写下窗体内容的代码 hello_worldEntities en ...
- xshell 连接虚拟机过程
(1)Ctrl+Shift+T 打开终端 terminal (2)ifconfig得到ip网络地址 (3)ssh安装已经打开ssh服务 (4)安装openssh-server sudo apt ins ...
- django中的forms组件(权限信息校验,增删改查)
1.用处 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确,则保留上次输入的内容 5.自动创建input标签并可以设置样式 6.基于form ...
- 前端JavaScript之ECMA
1.JavaScript基础 2.语法规则 3 常用内置对象 4 函数 5 伪数组 6.异常处理 1.1 web前端分为三层 HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化 ...
- SpringBoot学习8:springboot整合freemarker
1.创建maven项目,添加pom依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.springframewor ...
- JavaScript的变量命名规则和关键字的介绍
变量的名字 就像 人的名字一样,不能乱起. 你的代码不是只有你一个人看,变量既然是名字,那就这个名字就要有特殊的意义: 举个栗子:翠花,我们能从这个名字中得到什么信息?(这个 ...
- C/C++程序基础 (十)模板和泛型
什么是泛型编程 基于模板,有效将算法和数据结构分离. 模板 包括类型和参数 模板函数:抽象的函数定义,代表一类同构函数.编译器在其调用位置自动完成对应模板函数的实例化. 模板类:抽象的类定义,代表更高 ...