Skip to content

一键改包

现在项目中包命名都包含 wmeimob 公司名称。这其中就有一些特殊的客户,需要将 wmeimob 改成客户公司名称,例如 xxx。针对这种需求,提供了一键改包工具类。 在 framework-generator util 文件夹下有个PackageRenameUtil类,部分代码如下:

java
/**
 * 一键改包
 *
 * @author mjyang
 * @date 2023/7/20 18:04
 */
@Slf4j
public class PackageRenameUtil {

    private static final String GROUP_ID = "com.wmeimob.mall";
    private static final String ARTIFACT_ID = "wmeimob-mall";
    private static final String PACKAGE_NAME = "com.wmeimob.mall";

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        String projectBaseDir = getProjectBaseDir();
        log.info("原项目路径地址 ({})", projectBaseDir);

        // ========== 配置,需要你手动修改 ==========
        String groupIdNew = "com.custom";
        String artifactIdNew = "custom";
        String packageNameNew = "com.custom.plus";
        String projectBaseDirNew = projectBaseDir + "-new"; // 一键改名后,“新”项目所在的目录
        log.info("检测新项目目录 ({}) 是否存在", projectBaseDirNew);
        if (FileUtil.exist(projectBaseDirNew)) {
            log.error("新项目目录检测 ({})已存在,请更改新的目录!程序退出", projectBaseDirNew);
            return;
        }
        // 如果新目录中存在 PACKAGE_NAME,ARTIFACT_ID 等关键字,路径会被替换,导致生成的文件不在预期目录
        if (StrUtil.containsAny(projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID, StrUtil.upperFirst(ARTIFACT_ID))) {
            log.error("新项目目录检测 ({}) 存在冲突名称「{}」或者「{}」,请更改新的目录!程序退出",
                    projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID);
            return;
        }
        log.info("完成新项目目录检测,新项目路径地址 ({})", projectBaseDirNew);
        // 获得需要复制的文件
        log.info("开始获得需要重写的文件,预计需要 10-20 秒");
        Collection<File> files = listFiles(projectBaseDir);
        log.info("需要重写的文件数量:{},预计需要 15-30 秒", files.size());
        // 写入文件
        files.forEach(file -> {
            // 如果是白名单的文件类型,不进行重写,直接拷贝
            String fileType = getFileType(file);
            if (WHITE_FILE_TYPES.contains(fileType)) {
                copyFile(file, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew);
                return;
            }
            // 如果非白名单的文件类型,重写内容,在生成文件
            String content = replaceFileContent(file, groupIdNew, artifactIdNew, packageNameNew);
            writeFile(file, content, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew);
        });
        log.info("重写完成共耗时:{} 秒", (System.currentTimeMillis() - start) / 1000);
    }
}

这只是部分代码。可以通过项目查看完整代码。

关键代码说明

java
 private static final String GROUP_ID = "com.wmeimob.mall";
 private static final String ARTIFACT_ID = "wmeimob-mall";
 private static final String PACKAGE_NAME = "com.wmeimob.mall";

这是当前项目的配置,调整成正确的配置。

java
// ========== 配置,需要你手动修改 ==========
String groupIdNew = "com.custom";
String artifactIdNew = "custom";
String packageNameNew = "com.custom.plus";

这是要更改的配置。

请注意:一键改包后,项目目录会重新生成到带 -new 的文件中。可以在这里确认下改包是否正确。如正确,可直接去掉 -new 在重新生成。