You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让exec-maven-plugin仅在WAR包构建完成后执行一次?

解决方案:让exec-maven-plugin仅在WAR生成后执行一次

1. 限制插件仅在WAR子项目中执行

如果父项目是pom类型,仅在生成WAR的子项目(war打包类型)的pom.xml中配置exec-maven-plugin,不要将插件配置放在父项目的全局<build><plugins>块中。这样插件只会在该war子项目的构建流程中触发,不会波及其他子项目。

若需在父项目中通过<pluginManagement>统一管理插件版本,可在父项目的插件配置中添加<inherited>false</inherited>,然后在war子项目中显式引入该插件并配置执行逻辑,确保其他子项目不会继承执行该插件。

2. 解决删除target后找不到WAR的异常

  • 绑定到正确的Maven阶段:将插件绑定到package阶段之后的阶段(如verify或install)。package阶段是Maven生成WAR包的核心阶段,绑定到后续阶段能确保WAR文件已存在于target目录。示例配置:
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>upgrade-war-to-jakarta</id>
            <phase>verify</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>你的升级脚本路径或命令</executable>
                <arguments>
                    <argument>${project.build.directory}/${project.build.finalName}.war</argument>
                </arguments>
                <!-- 当WAR文件不存在时跳过执行 -->
                <skip>${!file.exists('${project.build.directory}/${project.build.finalName}.war')}</skip>
            </configuration>
        </execution>
    </executions>
</plugin>
  • 添加文件存在性检查:利用Maven内置的file.exists()属性判断WAR文件是否存在,若不存在则自动跳过插件执行,避免抛出文件未找到的异常。
  • 确认GWT插件的编译阶段(如compile或gwt:compile)早于package阶段,保证WAR生成前GWT代码已完成编译。

验证流程

执行mvn clean verify测试:删除target目录后,Maven会先完成编译、打包生成WAR,再触发exec插件执行升级操作,且仅在war子项目中执行一次。

内容的提问来源于stack exchange,提问作者Tugalsan Karabacak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:35:07