如何为你的Web程序(war包设定配置文件)

约定

http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html

上面链接说了:

The default resource directory for all Maven projects is src/main/resources which will end up in target/classes and in WEB-INF/classes in the WAR. The directory structure will be preserved in the process.

The WAR Plugin is also capable of including resources not found in the default resource directory through the webResources parameter.

默认是找 src/main/resource 目录的配置作为War包的配置,如果没找到,则可以使用用户自定义的,如下面,用户定义了目录 resource2 作为自定义目录。

<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>src/main/resource</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
...
</project>

例如,如果你的项目目录如下:

 .
|-- pom.xml
|-- resource2
| |-- external-resource.jpg
| `-- image2
| `-- external-resource2.jpg
`-- src
`-- main
|-- java
| `-- com
| `-- example
| `-- projects
| `-- SampleAction.java
|-- resources
| `-- images
| `-- sampleimage.jpg
`-- webapp
|-- WEB-INF
| `-- web.xml
|-- index.jsp
`-- jsp
`-- websource.jsp

那么,执行上面的POM之后,WAR包内容应该如下:

documentedproject-1.0-SNAPSHOT.war
|-- META-INF
| |-- MANIFEST.MF
| `-- maven
| `-- com.example.projects
| `-- documentedproject
| |-- pom.properties
| `-- pom.xml
|-- WEB-INF
| |-- classes
| | |-- com
| | | `-- example
| | | `-- projects
| | | `-- SampleAction.class
| | `-- images
| | `-- sampleimage.jpg
| `-- web.xml
|-- external-resource.jpg
|-- image2
| `-- external-resource2.jpg
|-- index.jsp
`-- jsp
`-- websource.jsp

大家可以看到,这个WAR包不仅有 src/main/resource 目录下的配置,还有 resource2下的配置。

说明,WAR的配置,来自两个地方,一个是默认的,一个是用户添加的。

如何覆盖?

我们最常见的用户场景是:

src/main/resource 目录下有开发的所有配置

src/main/online-resource 目录下有线上配置。它不包含所有配置。它只包含 src/main/resource 目录下那些需要被替换成线上配置的配置文件。也就是 开发和线上配置 的公同配置文件 是不会存在这个目录下的。

那么,我们的想法就很简单了,线上WAR的配置应该包括:

  • 首先,应该包括 src/main/resource 目录下所有文件
  • 然后,使用 src/main/online-resource 覆盖上面这个目录,将线下配置覆盖成线上配置,共同配置保留下来。

如何完成 以上操作呢?

https://github.com/knightliao/disconf/blob/master/disconf-web/pom.xml 这里提供了一个最佳实践:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources> <resource>
<directory>${project.build.online.sourceDir}</directory>
<targetPath>WEB-INF/classes</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource> </webResources>
</configuration>
</plugin>

只需要像上面这样配置,Maven帮我们默认执行了第一步(首先,应该包括 src/main/resource 目录下所有文件),我们自定义了第二步,Maven会帮我们覆盖掉。

Maven War包 POM配置文件的更多相关文章

  1. Maven将依赖包、jar/war包及配置文件输出到指定目录

    使用Maven插件将依赖包 jar包 war包及配置文件输出到指定目录 写在前面 ​ 最近遇到一个朋友遇到一个项目需要将 maven 的依赖包和配置文件分开打包然后用脚本执行程序.这样的好处在于可以随 ...

  2. 利用Maven插件将依赖包、jar/war包及配置文件输出到指定目录

    写在前面 ​ 最近遇到一个朋友遇到一个项目需要将maven的依赖包和配置文件分开打包然后用脚本执行程序.这样的好处在于可以随时修改配置文件内容及查看jar包.如果将所有打成一个jar包就会有个问题(例 ...

  3. maven中的pom配置文件标签的详细介绍

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  4. maven war包打包去除jar包瘦身

    1.pom文件配置 <!-- war包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  5. springboot项目打war包pom设置

    <build> <finalName>PayManager</finalName><!--打包后的名字PayManager.war--> <plu ...

  6. maven中的pom配置文件一——spring,mybatis,oracle,jstl,json,文件上传

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  7. maven项目打包分析及打包后war包缺少配置文件报错的原因分析,使用progard混淆时配置分析

    1.maven打包: 一直以来我都没太注意过在myeclipse下使用run as来clean居然对项目的target目录没有进行操作,要让操作有效,需要进入到maven build...选项下,进行 ...

  8. 如何正确读取war包中配置文件的路径

    转自:http://free-chenwei.iteye.com/blog/1507480 下面展示一段代码String path = getClass().getResource("/&q ...

  9. maven打war包的过程中,都用了哪些插件呢?

    一.maven生命周期 http://ifeve.com/introduction-to-the-lifecycle/ https://maven.apache.org/guides/introduc ...

随机推荐

  1. nyoj322 sort 归并排序,树状数组

    Sort 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 You want to processe a sequence of n distinct integers b ...

  2. 随笔记:如何使用Python连接(/操作)Oracle数据库(Windows平台下)

    遇到需求,我们需要用Python对Oracle数据库进行操作. 这次我们使用cx_Oracle Oracle Client 在安装cx_Oracle之前,先安装Oracle客户端. cx_Oracle ...

  3. spark结构化数据处理:Spark SQL、DataFrame和Dataset

    本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但 ...

  4. Hibernate中HQLwhere用法和单独取出几列数据的读取方法

    String hql = "select thedate,thehour,node,query_num from Cdns cdns where thehour = " +&quo ...

  5. FreeRTOS 低功耗之睡眠模式

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 低功耗是 MCU 的一项重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话 ...

  6. dp之区间:最大k乘积

    题目:给你一个n(1<=n<=15)位数,求将它分成m段,用m-1个*连接起来的最大乘积....... 思路:定义dp[i][j]为将前i位数分成j段的最大乘积,那么dp[i][j]==m ...

  7. spark streaming updateStateByKey 用法

    object NetworkWordCount { def main(args: Array[String]) { ) { System.err.println("Usage: Networ ...

  8. Winform重画ComboBox背景色

    //返回hWnd参数所指定的窗口的设备环境. [System.Runtime.InteropServices.DllImport("user32.dll")] static ext ...

  9. 从钉钉微应用定制化导航栏看如何实现Hybrid App开发框架

    钉钉是阿里的一款企业应用APP,里面提供了混合微应用的SDK,这其实最好的一种APP架构模式.微信公众号浏览器JSSDK也提供了类似功能特性,在在交互性上没有钉钉深入. http://ddtalk.g ...

  10. LNMP环境下SendMail+OpenWebMail的详细配置

    随着网络的发展和普及,邮件服务器正在成为人们日常生活中不可缺少的部分.现在,许多企业采用 Lotus Note, Exchange 作为公司内部的邮件服务器.本文主要介绍一种基于Linux系统的邮件服 ...