Including and Excluding Files From the WAR
It is possible to include or exclude certain files from the WAR file, by using the <packagingIncludes>
and <packagingExcludes>
configuration parameters. They each take a comma-separated list of Ant file set patterns. You can use wildcards such as **
to indicate multiple directories and *
to indicate an optional part of a file or directory name.
Here is an example where we exclude all JAR files from WEB-INF/lib
:
<project> ... <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.4.0</version> <configuration> <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> </configuration> </plugin> </plugins> </build> ... </project>
Sometimes even such wildcards are not enough. In these cases you can use regular expressions with the %regex[]
syntax. Here is a real life use case in which this is used. In this example we want to exclude any commons-logging and log4j JARs, but we do not want to exclude the log4j-over-slf4j JAR. So we want to exclude log4j-<version>.jar
but keep the log4j-over-slf4j-<version>.jar
.
<project> ... <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.4.0</version> <configuration> <!-- Exclude JCL and LOG4J since all logging should go through SLF4J. Note that we're excluding log4j-<version>.jar but keeping log4j-over-slf4j-<version>.jar --> <packagingExcludes> WEB-INF/lib/commons-logging-*.jar, %regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar] </packagingExcludes> </configuration> </plugin> </plugins> </build> ... </project>
If you have more real life examples of using regular expressions, we'd like to know about them.