ruoyi框架一键改包程序

ruoyi框架一键改包程序, 也适合其他框架的修改,不过可能要稍作调整.
根据自己的项目需要, 主要修改以下片段

String groupIdNew = "com.anycode.rms";
String artifactIdNew = "rms";
String packageNameNew = "com.anycode.rms";
String titleNew = "报表管理系统";
String projectBaseDirNew = "D:/123/anycode-rms"; // 路径不能包含ruoyi关键字

完整代码

package com.ruoyi;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.stream.Collectors;

import static java.io.File.separator;

@Slf4j
public class ProjectReactor {

    private static final String GROUP_ID = "com.ruoyi";
    private static final String ARTIFACT_ID = "ruoyi";
    private static final String PACKAGE_NAME = "com.ruoyi";
    private static final String TITLE = "若依管理系统";

    /**
     * 白名单文件,不进行重写,避免出问题
     */
    private static final Set<String> WHITE_FILE_TYPES = CollUtil.newHashSet("gif", "jpg", "svg", "png", // 图片
            "eot", "woff2", "ttf", "woff"); // 字体

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

        // ========== 配置,需要你手动修改 ==========
        String groupIdNew = "com.anycode.rms";
        String artifactIdNew = "rms";
        String packageNameNew = "com.anycode.rms";
        String titleNew = "报表管理系统";
        // String projectBaseDirNew = projectBaseDir + "-rms"; // 一键改名后,“新”项目所在的目录
        String projectBaseDirNew = "D:/123/anycode-rms"; // 路径不能包含ruoyi关键字
        log.info("[main][检测新项目目录 ({})是否存在]", projectBaseDirNew);
        if (FileUtil.exist(projectBaseDirNew)) {
            log.error("[main][新项目目录检测 ({})已存在,请更改新的目录!程序退出]", projectBaseDirNew);
            return;
        }
        // 如果新目录中存在 PACKAGE_NAME,ARTIFACT_ID 等关键字,路径会被替换,导致生成的文件不在预期目录
        if (StrUtil.containsAny(projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID, StrUtil.upperFirst(ARTIFACT_ID))) {
            log.error("[main][新项目目录 `projectBaseDirNew` 检测 ({}) 存在冲突名称「{}」或者「{}」,请更改新的目录!程序退出]",
                    projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID);
            return;
        }
        log.info("[main][完成新项目目录检测,新项目路径地址 ({})]", projectBaseDirNew);
        // 获得需要复制的文件
        log.info("[main][开始获得需要重写的文件,预计需要 10-20 秒]");
        Collection<File> files = listFiles(projectBaseDir);
        log.info("[main][需要重写的文件数量:{},预计需要 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, titleNew);
            writeFile(file, content, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew);
        });
        log.info("[main][重写完成]共耗时:{} 秒", (System.currentTimeMillis() - start) / 1000);
    }

    private static String getProjectBaseDir() {
        String baseDir = System.getProperty("user.dir");
        if (StrUtil.isEmpty(baseDir)) {
            throw new NullPointerException("项目基础路径不存在");
        }
        return baseDir;
    }

    private static Collection<File> listFiles(String projectBaseDir) {
        Collection<File> files = FileUtil.loopFiles(projectBaseDir);
        // 移除 IDEA、Git 自身的文件、Node 编译出来的文件
        files = files.stream()
                .filter(file -> !file.getPath().contains(separator + "target" + separator)
                        && !file.getPath().contains(separator + "node_modules" + separator)
                        && !file.getPath().contains(separator + ".idea" + separator)
                        && !file.getPath().contains(separator + ".git" + separator)
                        && !file.getPath().contains(separator + "dist" + separator)
                        && !file.getPath().contains(".iml")
                        && !file.getPath().contains(".html.gz"))
                .collect(Collectors.toList());
        return files;
    }

    private static String replaceFileContent(File file, String groupIdNew,
                                             String artifactIdNew, String packageNameNew,
                                             String titleNew) {
        String content = FileUtil.readString(file, StandardCharsets.UTF_8);
        // 如果是白名单的文件类型,不进行重写
        String fileType = getFileType(file);
        if (WHITE_FILE_TYPES.contains(fileType)) {
            return content;
        }
        // 执行文件内容都重写
        return content.replaceAll(GROUP_ID, groupIdNew)
                .replaceAll(PACKAGE_NAME, packageNameNew)
                .replaceAll(ARTIFACT_ID, artifactIdNew) // 必须放在最后替换,因为 ARTIFACT_ID 太短!
                .replaceAll(StrUtil.upperFirst(ARTIFACT_ID), StrUtil.upperFirst(artifactIdNew))
                .replaceAll(TITLE, titleNew);
    }

    private static void writeFile(File file, String fileContent, String projectBaseDir,
                                  String projectBaseDirNew, String packageNameNew, String artifactIdNew) {
        String newPath = buildNewFilePath(file, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew);
        FileUtil.writeUtf8String(fileContent, newPath);
    }

    private static void copyFile(File file, String projectBaseDir,
                                 String projectBaseDirNew, String packageNameNew, String artifactIdNew) {
        String newPath = buildNewFilePath(file, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew);
        FileUtil.copyFile(file, new File(newPath));
    }

    private static String buildNewFilePath(File file, String projectBaseDir,
                                           String projectBaseDirNew, String packageNameNew, String artifactIdNew) {
        return file.getPath().replace(projectBaseDir, projectBaseDirNew) // 新目录
                .replace(PACKAGE_NAME.replaceAll("\\.", Matcher.quoteReplacement(separator)),
                        packageNameNew.replaceAll("\\.", Matcher.quoteReplacement(separator)))
                .replace(ARTIFACT_ID, artifactIdNew) //
                .replaceAll(StrUtil.upperFirst(ARTIFACT_ID), StrUtil.upperFirst(artifactIdNew));
    }

    private static String getFileType(File file) {
        return file.length() > 0 ? FileTypeUtil.getType(file) : "";
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 若要快速修改 Ruoyi 框架的包名,可以按照以下步骤进行操作: 1. 打开 Ruoyi 项目所在的 IDE(如 IntelliJ IDEA)。 2. 在项目结构中,找到 src/main/java 目录,这是项目的主要 Java 源文件目录。 3. 在该目录下,找到原始包名所对应的文件夹,例如 "com.ruoyi.project"。 4. 将原始包名的文件夹及其子文件夹全部选中,右键点击,并选择 "Refactor"(重构)。 5. 在弹出的下拉菜单中,选择 "Rename"(重命名)。 6. 在新出现的对话框中,将原始包名的名称修改为你想要的新的包名,如 "com.yourname.project"。 7. 确认修改后,IDE 将会自动重命名原始包名及其包含的所有类和文件。 8. 检查是否有引用旧包名的地方,例如配置文件、依赖引入等等,需要将其修改为新的包名。 9. 如果 Ruoyi 框架使用了数据库,还需要修改数据库中存储旧包名的相关字段。 10. 在修改完所有相关的文件和配置后,重新编译项目,检查是否有编译错误。 以上是一种快速修改 Ruoyi 框架包名的方法,但需要注意的是,在进行此操作之前,最好备份项目代码或创建一个新的分支,以防修改出现问题。此外,还需注意修改包名可能会导致其他依赖包出现不兼容或有代码逻辑问题,需要进行相应的调整和修复。 ### 回答2: 要快速修改RuoYi框架中的包名,可以按照以下步骤进行操作: 1. 打开项目,找到原始包名,并在项目中搜索该包名,以确认它的出现位置。 2. 在项目的源代码目录中,对所有包名的出现进行全局替换。可以使用IDE的全局搜索和替换功能来实现这一步骤。确保将该包名替换为新包名的每一个出现。 3. 检查项目中的所有配置文件,包括application.properties或application.yml等。查找并替换原始包名。 4. 修改项目的文件和目录结构,以反映新的包名。例如,可以在项目文件夹中创建名为“com/example/myproject”的新目录结构,并将所有类和资源文件移动到这个新目录结构下。 5. 修改主类的包名。找到原始包名对应的主类,并将其包名修改为新包名。 6. 重新编译和运行项目,确保修改成功,并检查是否有其他编译错误或运行时错误。 需要注意的是,在修改包名之前,建议先备份项目,以防止不可预料的错误发生。此外,对于一些已经在使用的类库、第三方依赖或其他与原始包名有关的地方,可能需要额外的配置或修改来适应新的包名。 ### 回答3: 在Ruoyi框架中,要快速修改包名,可以按照以下步骤进行操作: 1. 打开需要修改包名的Java文件所在的目录,找到对应的包路径。 2. 将该目录下的所有文件全部复制一份,并粘贴到一个新的目录下。 3. 在新的目录下,将所有文件的包路径中原有的包名替换为新的包名。可以使用文本编辑器的“替换”功能来实现。 4. 检查是否有其他文件引用了修改前的包路径,如有,则需要修改相关文件中对应的引用路径。 5. 打开原有目录下的文件,在类的顶部找到包名的定义,并将其修改为新的包名。 6. 编译并运行项目,检查是否出现编译错误,如有,则需要进一步检查是否有其他文件未修改引用路径。 需要注意的是,由于Ruoyi框架涉及到多个模块和依赖关系,快速修改包名可能会引发一系列问题,例如依赖路径、配置文件路径等需要额外处理。因此,在修改包名之前,建议先备份项目,可参考Ruoyi框架的官方文档或寻求相关技术支持,确保修改过程正确无误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值