maven中静态资源和字节码文件的过滤

来源:互联网 发布:你的名字同款结绳淘宝 编辑:程序博客网 时间:2024/06/06 14:44

本文的方法是针对Maven管理的Java Web工程

静态资源的过滤

在maven中,静态资源的过滤使用基本上大家都知道,只需要在<build></build>中使用resources标签即可,示例如下:

<build>    <resources>        <resource>            <directory>src/main/resources</directory>            <includes>                <include>**/*.xml</include>            </includes>            <filtering>true</filtering>        </resource>    </resources></build>

在静态资源的过滤中,基本的元素有三种:

  • directory:指定资源所在的目录,这个目录的路径是相对于pom.xml文件;
  • includes:指定要包含哪些文件,其中包括inlcude子节点来指定匹配的模式;
  • excludes:指定要排除哪些文件,其中包括exclude子节点来指定匹配的模式;
  • filtering:指定哪些文件需要过滤,这个过滤的目的是为了替换其中的占位符${},其中的占位符属性在pom.xml文件中的<properties></properties>中指定;

在其中可能遇到的问题如下:

  • 当includes和excludes冲突的时候,优先采取excludes中的设定,这篇文章中详细的说明了,这篇文章从源码角度进行了分析;

字节码文件的过滤

相对于静态资源的过滤,针对字节码文件的过滤则比较生僻,尤其是在配置文件基本上都是xml或者properties的时候,如果你的工程的配置是Java Config风格的,那么就会遇到在不同的环境下加载不同的配置类的问题。不同于静态的配置文件直接使用<resources>标签(其实背后还是通过resource插件完成的),字节码的过滤需要直接使用maven-war-plugin ,实例如下:

<plugin>   <groupId>org.apache.maven.plugins</groupId>   <artifactId>maven-war-plugin</artifactId>   <version>3.0.0</version>   <configuration>      <packagingExcludes>WEB-INF/classes/test/dao/,         WEB-INF/classes/test/service/,         WEB-INF/classes/config/TestConfig.class,         WEB-INF/lib/log4j-*.jar      </packagingExcludes>   </configuration></plugin>

从上面可以看到,该插件是通过packagingExcludes元素完成过滤的,这个元素的作用是在工程package之前, 通过一些模式来排除掉一些文件或者文件夹,如果有多个可以通过逗号“,”来分割,上述使用的例子:

  • 排除特定配置类:WEB-INF/classes/config/TestConfig.class
  • 排除特定文件夹:WEB-INF/classes/test/service/
  • 排除引用的jar包:WEB-INF/lib/log4j-*.jar

上述使用的路径是相对于war包的根路径的

另外在packagingExcludes中还可以使用Java的正则表达式,通过%regex[...]包裹即可,具体可以看官方文档 .

0 0
原创粉丝点击