Maven:将任意文件作为servlet上下文资源
-
04-10-2019 - |
题
我有一个Maven War项目,该项目生产WebApp.war,以及一个生产Skin.zip(充满资源和XML文件的文件)的Maven“ Skin”项目。现在,我想将此ZIP文件添加为Servlet上下文资源(例如Web-Inf/skin.zip)。
我尝试使用叠加层,但它将zip文件扩展到Web-Inf中,而不是将未扩展的文件放在那里:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>com.mycompany</groupId>
<artifactId>skin</artifactId>
<type>zip</type>
<targetPath>WEB-INF</targetPath>
</overlay>
</overlays>
</configuration>
</plugin>
是否有任何方法可以防止其扩展资源 - 或以某种方式将文件粘在其中(不使用蚂蚁拼图)。
笔记: type
是一个完全不必要的和无用的配置元素 - 它不会告诉插件如何扩展工件,如您所期望的那样 - 它告诉它如何 寻找 它。例如,如果您将类型从zip更改为jar,它会抱怨它找不到工件(以最无用的方式)。
解决方案
我尝试使用叠加层,但它将zip文件扩展到Web-Inf
是的,这就是覆盖物的作用,内容被打开了包装以与战争合并。在您的情况下,这不是正确的工具。
有什么方法可以防止其扩展资源 - 或以某种方式将文件粘在其中
我会用 Maven依赖插件 及其 dependency:copy
目标:
dependency:copy
获取插件配置部分中定义的工件列表,并将其复制到指定的位置,将其重命名或根据需要剥离版本。如果本地不存在,则此目标可以解决远程存储库中的工件。
并将其绑在 prepare-package
阶段。以下,一些起点:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-prepare-package</id>
<phase>prepare-package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.mycompany</groupId><!-- or ${project.groupId} -->
<artifactId>skin</artifactId>
<version>X.Y.Z</version><!-- or ${project.version} -->
<type>zip</type>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
看 复制特定的工件 有关更多示例。
不隶属于 StackOverflow