有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Maven资源插件忽略排除列表

TL;博士

Maven的资源插件似乎不尊重资源配置中的excludes元素

背景

我有一个大型Java/Dart项目,需要在其中部署一个WAR文件,该文件将我的UI和后端都放在单独的JAR中。我想减少已部署文件的大小,并从WAR中删除某些文件夹。基于plugin documentation,我想我可以简单地在插件配置中设置exclude,它不会复制不必要的文件夹。然而,Resources插件似乎完全忽略了这些,尽管Maven模型包包含了setExcludes函数

当前的尝试

到目前为止,我已经尝试了两种主要的方法。我的配置如下:

<configuration>
    <outputDirectory>${project.build.directory}/${project.build.finalName}</outputDirectory>
    <resources>
        <resource>
            <directory>src/main/webapp</directory>
            <excludes>
                <exclude>web.xml</exclude>
                <exclude>appengine-web.xml</exclude>
                <exclude>**/web/_el/*</exclude>
                <exclude>WEB-INF/pages/frontend/**</exclude>
                <exclude>**/_el/js/frontend/**</exclude>
                <exclude>**/_el/dart/app/dashboard/lib/**</exclude>
                <exclude>**/_el/dart/app/dashboard/.dart_tool/**</exclude>
            </excludes>
        </resource>
    </resources>
</configuration>

我试图在execution元素内部以及直接从plugin元素下的外部使用此配置,但两次都被忽略,并且webapp目录中的所有内容都被无意识地复制了一遍
凭直觉,我确实尝试将filtering设置为true,但这只会耗尽我计算机中的所有内存,而且它甚至不工作——它所做的工作被复制了一遍

我也尝试过使用Shade插件,但很快就放弃了,因为DontIncludeResourceTransformer只允许后缀过滤,这不适合我的用例

问题:

那么我做错了什么?基于这些文档,我认为插件应该尊重我的excludes列表,跳过绝大多数文件,但它显然没有做到这一点


共 (1) 个答案

  1. # 1 楼答案

    您需要使用apache **maven war plugin**。 WAR插件负责收集web应用程序的所有工件依赖项、类和资源,并将它们打包到web应用程序归档中

    通过使用和配置参数,可以从WAR文件中包括或排除某些文件。它们都采用逗号分隔的Ant文件集模式列表。您可以使用**等通配符来表示多个目录,使用*来表示文件或目录名的可选部分

    下面是一个从WEB-INF/lib中排除所有JAR文件的示例:

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

    https://maven.apache.org/plugins/maven-war-plugin/examples/including-excluding-files-from-war.html