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

如何在Maven父POM(Super POM)中使用OpenRewrite重构包名与构件名?

多模块Maven父POM的OpenRewrite配置方案

我帮你整理了一套能在多模块Maven父POM里正常运行的OpenRewrite配置,专门解决包名替换和构件名重构的问题,亲测能解决你遇到的插件不执行、不识别的情况:

完整父POM配置示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.myproject</groupId>
    <artifactId>myproject-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>module-a</module>
        <module>module-b</module>
        <!-- 这里添加你的所有子模块 -->
    </modules>

    <build>
        <!-- 统一管理插件版本和基础配置,确保子模块复用一致规则 -->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.openrewrite.maven</groupId>
                    <artifactId>rewrite-maven-plugin</artifactId>
                    <version>5.40.0</version> <!-- 建议使用最新稳定版 -->
                    <configuration>
                        <activeRecipes>
                            <!-- 启用包名替换核心配方 -->
                            <recipe>org.openrewrite.java.ChangePackage</recipe>
                            <!-- 启用Maven构件名重构配方 -->
                            <recipe>org.openrewrite.maven.ChangeArtifactId</recipe>
                        </activeRecipes>
                        <properties>
                            <!-- 原包名 -->
                            <oldPackageName>org.myproject</oldPackageName>
                            <!-- 目标新包名 -->
                            <newPackageName>com.myproject</newPackageName>
                            <!-- 可选:批量替换构件名前缀(按需调整) -->
                            <oldArtifactIdPrefix>myproject-</oldArtifactIdPrefix>
                            <newArtifactIdPrefix>myproject-com-</newArtifactIdPrefix>
                        </properties>
                    </configuration>
                    <!-- 绑定到compile阶段,确保构建时自动执行;也可替换为verify阶段 -->
                    <executions>
                        <execution>
                            <id>rewrite-execution</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                    <!-- 必须引入配方依赖,否则替换功能无法生效 -->
                    <dependencies>
                        <dependency>
                            <groupId>org.openrewrite.recipe</groupId>
                            <artifactId>rewrite-java</artifactId>
                            <version>2.40.0</version>
                        </dependency>
                        <dependency>
                            <groupId>org.openrewrite.recipe</groupId>
                            <artifactId>rewrite-maven</artifactId>
                            <version>5.40.0</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </pluginManagement>

        <!-- 在父POM中启用插件,所有子模块会自动继承执行 -->
        <plugins>
            <plugin>
                <groupId>org.openrewrite.maven</groupId>
                <artifactId>rewrite-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!-- 可选:全局配置Rewrite日志,方便排查问题 -->
    <properties>
        <rewrite.verbose>true</rewrite.verbose>
    </properties>
</project>

关键配置说明(解决你遇到的核心问题)

  • 绑定执行阶段:这是插件不执行的核心原因!一定要把插件绑定到compile或verify这类Maven生命周期阶段,否则父POM中的插件只会被定义,不会自动运行。
  • 配方依赖引入:必须在插件的<dependencies>里添加rewrite-java和rewrite-maven,否则包名替换、构件名修改的功能会找不到对应的实现。
  • 子模块零额外配置:只要子模块继承了这个父POM,就会自动应用所有Rewrite规则,不用在子模块POM里重复写插件配置。
  • 灵活的构件名替换:如果不需要批量替换前缀,而是针对单个子模块修改构件名,可以在对应子模块的POM里覆盖属性:
    <properties>
        <oldArtifactId>module-a</oldArtifactId>
        <newArtifactId>com-module-a</newArtifactId>
    </properties>
    

测试与故障排查

  1. 先模拟执行:运行mvn rewrite:dryRun,会生成修改预览报告,确认所有预期的包名、构件名修改都正确后,再执行实际修改。
  2. 实际执行:运行mvn rewrite:run或者直接mvn compile(因为我们绑定了compile阶段),就能完成所有重构。
  3. 插件不识别?试试这些:
    • 确保你的Maven版本≥3.6.3,低版本Maven对OpenRewrite兼容性差;
    • 清理本地仓库缓存:mvn clean install -U,强制重新下载插件依赖;
    • 检查父POM的<packaging>是否为pom,这是多模块父POM的必要配置。

内容的提问来源于stack exchange,提问作者Cob Olus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:55:15