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设置的更多相关文章

  1. maven pom 中的 build——resources 标签 mybatis加载mapper类及.xml文件

    转: maven 理解 2017年12月18日 15:34:31 feicongcong 阅读数:5658   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  2. Android中的颜色设置

    1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...

  3. 21)pom 中的缺省值(default properties)

    1 引言 项目中build 时用到了maven-jar-plugin ,其中有一个 ${project.build.directory} <plugin> <artifactId&g ...

  4. 【转】Android中的颜色设置

    原文网址:http://www.cnblogs.com/bluestorm/p/3644669.html 1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如: 1 2 3 publ ...

  5. (转)Maven POM中的各种scope的行为总结

    原地址:https://blog.csdn.net/cnweike/article/details/52221410 compile:默认的scope.任何定义在compile scope下的依赖将会 ...

  6. Maven POM中的各种scope的行为总结

    compile:默认的scope.任何定义在compile scope下的依赖将会在所有的class paths下可用.maven工程会将其打包到最终的artifact中.如果你构建一个WAR类型的a ...

  7. Maven工程pom中定义jdk版本

    今天把之前做的项目导进eclipse,然后发现报错,一些类在1.6中不支持,需要将JDK版本设置为1.7,我直接通过eclipse中的提示进行更改,然后update project一下,发现又回到了S ...

  8. 转-ArcGIS Engine中的License设置

    AE开发中的License有两种方法进行设置,一种是通过LicenseControl控件,另一种是通过IAoInitialize接口设置.整个应用程序中只能有一种方式存在,如果进行了两种License ...

  9. 请将 php.ini 中的 short_open_tag 设置为 On,否则无法继续安装。

    安装的wamp套件,访问http://localhost/Discuz/install/index.PHP进行安装操作,提示 对不起,请将 php.ini 中的 short_open_tag 设置为 ...

随机推荐

  1. P1567 统计天数

    题目背景 统计天数 题目描述 炎热的夏日,KC非常的不爽.他宁可忍受北极的寒冷,也不愿忍受厦门的夏天.最近,他开始研究天气的变化.他希望用研究的结果预测未来的天气. 经历千辛万苦,他收集了连续N(1& ...

  2. BCB::TClientSocket,TServerSocket控件

    一,首先服务端开启监听 ServerSocket1->Port=StrToInt(5000); ServerSocket1->Active=true; ServerSocket1控件,响应 ...

  3. Java8函数之旅 (二) --Java8中的流

    流与集合    众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...

  4. 设置禁止网络连接后,jdbc如何连接到数据库

    设置禁止网络连接,可在my.ini文件中添加如下两行 skip-networking enable-named-pipe 可以通过 SHOW VARIABLES LIKE '%skip_ne%' 来查 ...

  5. cmd文件内容添加到文件内容命令

    今天需要因为有点SQL文件需要添加修改,但是感觉是做运维工作得当然不能一个一个来了.搞了半天bat才找到这个命令(真是一个不合格的运维) 例如:a.txt 内容添加到 b.txt (不是覆盖,而是在 ...

  6. hdu_2837_Calculation(欧拉函数,快速幂求指数循环节)

    Assume that f(0) = 1 and 0^0=1. f(n) = (n%10)^f(n/10) for all n bigger than zero. Please calculate f ...

  7. python基础——文件访问模式

    文件访问模式 访问模式 说明 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. w 打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件. a 打开一个 ...

  8. JDK1.8简单配置环境变量---两步曲

    鄙人最近重新装完系统之后,在安装和配置jdk1.8的时候,发现网上许多教程配置jdk环境变量时都还在沿用传统的方式配置,但是随着技术的更新,完全没有必要那么麻烦了. 下载和安装jdk的教程,在这里就不 ...

  9. 并排打印多个图案(C++实现)

    在练习循环控制语句时,经常会遇到一类问题:使用循环控制打印星号(*)来形成各种各样的图案,并强调所有的星号(*)都要用单条的输出语句cout<<"*";来打印. 例如打 ...

  10. ethereum(以太坊)(七)--枚举/映射/构造函数/修改器

    pragma solidity ^0.4.10; //枚举类型 contract enumTest{ enum ActionChoices{Left,Right,Straight,Still} // ...