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. Annual Congress of MUD(最大流)

    Annual Congress of MUD 时间限制: 1 Sec  内存限制: 128 MB提交: 80  解决: 10[提交] [状态] [讨论版] [命题人:admin] 题目描述 Multi ...

  2. Visual Studio 2013 ReportViewer Control

    最近需要给学生讲报表,.NET的自然就是选择RDLC了. 因为学生比赛是用Visual Studio 2013,所以我在自己的笔记本上安装了Visual Studio 2013(平常是用2010),安 ...

  3. clear:both;和overflow:hidden;的应用理解。

    摘自cbwcwy 前辈: clear是子模块之间限定的,如下:<div id="a">    <div id="1"></div& ...

  4. python :编写装饰器

    简单装饰器 def log_time(func): # 此函数的作用时接受被修饰的函数的引用test,然后被内部函数使用 def make_decorater(): print('现在开始装饰') f ...

  5. ubuntu 报错E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unav E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process us

    1.配置xshell,查看虚拟机中ubuntu中网络ip ifconfig 报错 Command 'ifconfig' not found, but can be installed with: su ...

  6. Git版本控制的原理

    Git工作区域 工作目录(Working Directory) 暂存区(Stage/Index) 资源库(Repository或Git Directory) 远程的git仓库(Remote Direc ...

  7. CSS3一些特殊属性

    (一)-webkit-tap-highlight-color         这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就 ...

  8. ubuntu16 升级pip3后报错File "/usr/bin/pip3", line 9, in <module> from pip import main ImportError: cannot import name 'main'

    问题:ubuntu16 执行pip3 install --upgrade pip之后,pip3执行出错. Traceback (most recent call last): File "/ ...

  9. PHP关于 []

    在一个表格里,提交时,名字部分加一个[],表示数组,这样,存在多个同样名字的name.前面的value不会替代后面value,如下面 <td><input name="so ...

  10. Google Compute Engine VM自动调节

    现象:利用google云搭建VM服务,在搭建实例组有一个"自动调节"功能,可以自动添加/删除MV,当自动添加VM时可能新添加的VM就是一个新的VM,你部署的代码或者环境都没了.现在 ...