我目前有此设置:
项目A输出 war 文件-具有配置文件(WEB-INF/web.xml)。我们一直在使用配置注释掉的部分来交付此功能,当项目部署在特定环境中时,该注释不会手动注释。
该项目的需求已发生变化-我需要构建项目A,而无需完全配置这一部分。我需要使用该部分配置(启用,未注释掉)来构建另一个项目(项目B)。
我希望文件可以不存在于两个项目中(双重维护),而希望我可以使项目B依赖项目A(通过 war 叠加),然后使用maven-config-processor-plugin将我的特殊配置添加到WEB中。 -INF/web.xml,然后重新打包war文件。
这似乎不起作用-但是-如果目标已经存在(即在上次运行之后),则配置修改可以起作用,但是当我一起运行所有内容时,叠加和重新打包到新的 war 中会同时发生-我可以t找出使配置处理器插件在中间运行的任何方法。基本上,默认顺序最终是“config-processor”(由于覆盖尚未发生而失败),然后是“war”(全部作为一个单元)。我无法使配置处理器发生在叠加之后但未完全打包 war 之前。
在过去的几年中,互联网上有很多人问是否有一种方法可以在“打开叠加层”和“重新打包 war 文件”步骤之间注入(inject)一个插件,但是似乎没有人以任何一种方式明确地回答过这一问题。有任何想法吗?
最佳答案
由于 war 叠加和 war 包装似乎都是作为一个目标的一部分而发生的,所以我认为没有办法介入其中。解决方法是,您可以在较早的阶段提取web.xml
并进行处理。可以在项目B中使用maven-dependency-plugin从项目A中提取web.xml
到工作目录中,然后在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/