如何配置exec-maven-plugin使其目标在Maven的package阶段触发执行
问题核心原因
你将exec-maven-plugin的完整配置放在了<pluginManagement>标签中,该标签的作用是声明可跨子模块复用的插件通用配置,本身不会在当前模块的构建生命周期中激活插件,因此你绑定到package阶段的执行逻辑不会自动触发。
直接执行mvn exec:exec能生效是因为命令行手动指定了执行插件目标,会自动匹配全局的插件配置。
修复步骤
- 移除
<dependencies>节点中exec-maven-plugin的依赖声明,Maven插件不需要作为项目依赖引入。 - 在
<build>节点下新增独立的<plugins>节点(不要嵌套在<pluginManagement>内),将exec-maven-plugin的配置移入该节点,或仅声明插件坐标继承pluginManagement中的配置即可。
修正后的build节点示例
<build> <pluginManagement> <plugins> <!-- 其他插件的通用配置保留在此处 --> ... </plugins> </pluginManagement> <!-- 新增的plugins节点,用于激活当前模块需要执行的插件 --> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>Create Executable</id> <phase>package</phase> <goals> <goal>exec</goal> </goals> </execution> </executions> <configuration> <executable>${project.basedir}/scripts/make_rmqcm.bat</executable> <arguments> <!-- 建议统一路径分隔符,Windows下可统一用\,跨平台推荐用/ Maven会自动适配 --> <argument>${project.basedir}/scripts/executable_java_stub.sh</argument> <argument>${project.build.directory}/${project.build.finalName}.jar</argument> <argument>${project.build.directory}/${project.name}</argument> </arguments> </configuration> </plugin> </plugins> </build>
验证
修改完成后执行mvn clean package,即可在构建的package阶段自动触发脚本执行,生成目标可执行文件。
内容的提问来源于stack exchange,提问作者Russ Petersen
相关产品推荐
相关产品推荐

