为何exec-maven-plugin会重复执行所有阶段?如何修复该问题?
解决exec-maven-plugin重复执行的问题
这种exec-maven-plugin莫名执行两次的问题我碰过好多次,大概率是这几个常见坑导致的,我给你一步步排查和解决的思路:
常见原因及对应解决方案
1. 重复绑定了插件执行逻辑
- 排查点:检查你的pom.xml是否存在以下情况:
- 同一个插件配置了多个
<execution>节点,且都绑定到了同一个构建阶段 - 项目继承的父pom已经配置了该插件,子pom又重复添加了一遍完整配置
- 命令行执行时同时指定了构建阶段和插件目标(比如
mvn compile exec:exec,这样既会触发compile阶段绑定的执行,又会直接执行exec:exec目标)
- 同一个插件配置了多个
- 解决方法:
- 删掉重复的
<execution>节点,确保每个执行逻辑只绑定一次 - 检查父pom的插件配置,子pom如果需要覆盖配置,用
<pluginManagement>或者直接继承即可,不要重复添加完整插件配置 - 只执行绑定了插件的构建阶段命令(比如只跑
mvn compile),不要额外在命令行加插件目标
- 删掉重复的
2. 未指定唯一的execution ID
- 排查点:如果你的
<execution>节点没有设置<id>,Maven会自动生成默认ID,若存在多个无ID的execution,可能导致重复执行逻辑 - 解决方法:给每个
<execution>设置唯一的ID,比如:<execution> <id>unique-exec-id</id> <!-- 必须唯一 --> <phase>compile</phase> <goals> <goal>exec</goal> </goals> </execution>
3. 插件配置中指定了多个目标(goal)
- 排查点:如果在
<goals>里同时添加了exec:exec和exec:java,或者重复添加了同一个goal,每个goal都会触发一次执行 - 解决方法:确保
<goals>里只保留你需要的一个目标,比如只留<goal>exec</goal>
4. 用调试日志定位根源
如果以上方法都没找到问题,直接跑带调试日志的命令:
mvn clean compile -X
在日志里搜索exec-maven-plugin,可以看到每一次执行的触发源(是哪个execution、哪个阶段触发的),精准定位重复执行的原因。
正确配置示例
这里给你一个不会重复执行的标准配置参考:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.0</version> <executions> <execution> <id>single-execution-id</id> <phase>compile</phase> <goals> <goal>exec</goal> </goals> <configuration> <!-- 这里写你的执行配置,比如执行的命令、参数等 --> <executable>echo</executable> <arguments> <argument>Hello from exec plugin</argument> </arguments> </configuration> </execution> </executions> </plugin> </plugins> </build>
内容的提问来源于stack exchange,提问作者Thundercleez
相关产品推荐
相关产品推荐

