gpt4 book ai didi

maven - 在 Maven 中修改 war 覆盖内的资源

转载 作者:行者123 更新时间:2023-12-04 07:07:02 27 4
gpt4 key购买 nike

我目前有这个设置:

项目 A 输出一个 war 文件 - 有一个配置文件 (WEB-INF/web.xml)。我们已经通过注释掉的配置部分来交付它,当项目部署在特定环境中时,它会手动取消注释。

项目的需求发生了变化——我需要在完全没有该部分配置的情况下构建项目 A;并且我需要使用该配置部分构建另一个项目(项目 B)(启用,未注释掉)。

我希望我可以让项目 B 依赖于项目 A(通过 war 覆盖),而不是在两个项目中都存在该文件(双重维护),然后使用 maven-config-processor-plugin 将我的特殊配置添加到 WEB -INF/web.xml,然后重新打包war文件。

这似乎不起作用 - 虽然 - 如果目标已经存在(即在上一次运行之后),配置修改可以工作,但是当我一起运行所有内容时,覆盖和重新打包到新 war 中一起发生 - 我可以' t 想办法让 config-processor 插件在中间运行。基本上,默认顺序最终是“config-processor”(由于覆盖尚未发生而失败),然后是“war”(全部作为一个单元)。我不能让配置处理器在覆盖之后但在 war 完全打包之前发生。

过去几年,互联网上的多人询问是否有办法在“解包覆盖”和“重新打包 war 文件”步骤之间注入(inject)插件,但似乎没有人明确回答这个问题。有任何想法吗?

最佳答案

由于 war 覆盖和 war 包装似乎都是作为单一目标的一部分发生的,我认为没有办法进入其中。作为一种解决方法,您可以提取 web.xml在较早的阶段并处理它。项目B中可以使用maven-dependency-plugin提取web.xml从项目 A 到工作目录,然后在 web.xml 上运行 maven-config-processor-plugin并将结果放在其他地方,然后指示 maven-war-plugin 包含已处理的 web.xml在覆盖之前。在项目 B 的 POM 中:

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<!-- Extract web.xml from Project A -->
<execution>
<id>unpack-webxml</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>your.group</groupId>
<artifactId>project.a</artifactId>
<version>...</version>
<type>war</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/myconfig/work</outputDirectory>
<includes>WEB-INF/web.xml</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.code.maven-config-processor-plugin</groupId>
<artifactId>maven-config-processor-plugin</artifactId>
<version>2.0</version>
<executions>
<!-- Process extracted web.xml and place in temp build directory -->
<execution>
<id>process-webxml</id>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/myconfig/build</outputDirectory>
<transformations>
<transformation>
<input>${project.build.directory}/myconfig/work/WEB-INF/web.xml</input>
<output>WEB-INF/web.xml</output>
<!-- your transformation config -->
</transformation>
</transformations>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<!-- Instruct war plugin to include temp build directory in webapp -->
<resource>
<directory>${project.build.directory}/myconfig/build</directory>
<includes>
<include>**</include>
</includes>
</resource>
</webResources>
<overlays>
<!-- Overlay customization if needed -->
</overlays>
</configuration>
</plugin>
</plugins>

据我所知,war 插件包括 webResources首先是 src/main/webapp ,然后是叠加层。

我不熟悉 maven-config-processor-plugin,所以如果我的配置不正确,我深表歉意。

关于maven - 在 Maven 中修改 war 覆盖内的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com