本文的方法是针对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>1234567891011
在静态资源的过滤中,基本的元素有三种:
directory
:指定资源所在的目录,这个目录的路径是相对于pom.xml文件;includes
:指定要包含哪些文件,其中包括inlcude子节点来指定匹配的模式;excludes
:指定要排除哪些文件,其中包括exclude子节点来指定匹配的模式;filtering
:指定哪些文件需要过滤,这个过滤的目的是为了替换其中的占位符${}
,其中的占位符属性在pom.xml文件中的<properties></properties>
中指定;
在其中可能遇到的问题如下:
字节码文件的过滤
相对于静态资源的过滤,针对字节码文件的过滤则比较生僻,尤其是在配置文件基本上都是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>123456789101112
从上面可以看到,该插件是通过packagingExcludes
元素完成过滤的,这个元素的作用是在工程package之前, 通过一些模式来排除掉一些文件或者文件夹,如果有多个可以通过逗号“,”来分割,上述使用的例子:
- 排除特定配置类:
WEB-INF/classes/config/TestConfig.class
- 排除特定文件夹:
WEB-INF/classes/test/service/
- 排除引用的jar包:
WEB-INF/lib/log4j-*.jar
上述使用的路径是相对于war包的根路径的。
另外在packagingExcludes
中还可以使用Java的正则表达式,通过%regex[...]
包裹即可,具体可以看官方文档 .
转载链接:https://blog.csdn.net/lmy86263/article/details/71189485?locationNum=3&fps=1