Maven 资源插件忽略排除列表
Maven Resources plugin ignoring exclusion list
TL;博士
Maven 的 Resources 插件似乎不尊重资源配置中的 excludes
元素。
设置
我有一个大型 Java/Dart 项目,我需要在其中部署一个 WAR 文件,该文件在不同的 JAR 中包含我的 UI 和我的后端。我想减少部署文件的大小,并且我想从 WAR 中删除某些文件夹。基于 plugin documentation,我想我可以简单地在我的插件配置中设置 exclude
s,它不会复制不需要的文件夹。但是,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
目录下的=46=]被胡乱抄过来了
凭直觉,我确实尝试将 filtering
设置为 true,但这只是耗尽了我计算机中的所有内存,而且它甚至没有工作 - 它所做的过程被复制了。
我也尝试过使用 Shade 插件,但很快就放弃了,因为 DontIncludeResourceTransformer
只允许后缀过滤,这对我来说是不够的用例。
问题
那我做错了什么?根据文档,我认为插件应该尊重我的 excludes
列表并跳过绝大多数文件,但它显然没有这样做。
您需要使用 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
TL;博士
Maven 的 Resources 插件似乎不尊重资源配置中的 excludes
元素。
设置
我有一个大型 Java/Dart 项目,我需要在其中部署一个 WAR 文件,该文件在不同的 JAR 中包含我的 UI 和我的后端。我想减少部署文件的大小,并且我想从 WAR 中删除某些文件夹。基于 plugin documentation,我想我可以简单地在我的插件配置中设置 exclude
s,它不会复制不需要的文件夹。但是,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
目录下的=46=]被胡乱抄过来了
凭直觉,我确实尝试将 filtering
设置为 true,但这只是耗尽了我计算机中的所有内存,而且它甚至没有工作 - 它所做的过程被复制了。
我也尝试过使用 Shade 插件,但很快就放弃了,因为 DontIncludeResourceTransformer
只允许后缀过滤,这对我来说是不够的用例。
问题
那我做错了什么?根据文档,我认为插件应该尊重我的 excludes
列表并跳过绝大多数文件,但它显然没有这样做。
您需要使用 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