在 WAR 中包含和排除文件

通过使用<packagingIncludes><packagingExcludes>配置参数,可以在 WAR 文件中包含或排除某些文件。它们每个都采用逗号分隔的 Ant 文件集模式列表。您可以使用通配符,例如**指示多个目录以及*指示文件或目录名称的可选部分。

这是一个示例,我们从中排除所有 JAR 文件WEB-INF/lib

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.3.2</version>
        <configuration>
          <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

有时即使是这样的通配符也是不够的。%regex[]在这些情况下,您可以使用带有语法的正则表达式。这是一个使用它的真实用例。在此示例中,我们希望排除任何 commons-logging 和 log4j JAR,但我们不想排除 log4j-over-slf4j JAR。所以我们要排除log4j-<version>.jar但保留log4j-over-slf4j-<version>.jar.

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.3.2</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>

如果您有更多使用正则表达式的真实示例,我们很想了解它们。请使用您的配置在我们的问题跟踪器中提交问题,以便我们可以扩展此页面。