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

xiaoxiao2021-02-27  202

本文的方法是针对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[...]包裹即可,具体可以看官方文档 .

转载请注明原文地址: https://www.6miu.com/read-10403.html

最新回复(0)