Commit 3e77061c40894861ec8da2294cc1142bfd346901
Merge branch 'feature/project-reactor' of https://gitee.com/zhijiantianya/ruoyi-…
…vue-pro into feature/project-reactor
Showing
1 changed file
with
20 additions
and
14 deletions
yudao-server/src/test/java/cn/iocoder/yudao/ProjectReactor.java
| ... | ... | @@ -8,10 +8,12 @@ import org.apache.commons.io.FileUtils; |
| 8 | 8 | import java.io.File; |
| 9 | 9 | import java.nio.charset.StandardCharsets; |
| 10 | 10 | import java.util.Collection; |
| 11 | +import java.util.regex.Matcher; | |
| 12 | +import java.util.stream.Collectors; | |
| 11 | 13 | |
| 12 | 14 | /** |
| 13 | 15 | * 项目修改器,一键替换 Maven 的 groupId、artifactId,项目的 package 等 |
| 14 | - * | |
| 16 | + * <p> | |
| 15 | 17 | * 通过修改 groupIdNew、artifactIdNew、projectBaseDirNew 三个变量 |
| 16 | 18 | * |
| 17 | 19 | * @author 芋道源码 |
| ... | ... | @@ -25,6 +27,7 @@ public class ProjectReactor { |
| 25 | 27 | private static final String TITLE = "芋道管理系统"; |
| 26 | 28 | |
| 27 | 29 | public static void main(String[] args) { |
| 30 | + long start = System.currentTimeMillis(); | |
| 28 | 31 | String projectBaseDir = getProjectBaseDir(); |
| 29 | 32 | |
| 30 | 33 | // ========== 配置,需要你手动修改 ========== |
| ... | ... | @@ -33,7 +36,7 @@ public class ProjectReactor { |
| 33 | 36 | String packageNameNew = "cn.start.pp"; |
| 34 | 37 | String titleNew = "土豆管理系统"; |
| 35 | 38 | String projectBaseDirNew = projectBaseDir + "-new"; // 一键改名后,“新”项目所在的目录 |
| 36 | - // ========== ========== | |
| 39 | + log.info("[main][新项目路径地址]projectBaseDirNew: " + projectBaseDirNew); | |
| 37 | 40 | |
| 38 | 41 | // 获得需要复制的文件 |
| 39 | 42 | log.info("[main][开始获得需要重写的文件]"); |
| ... | ... | @@ -44,22 +47,26 @@ public class ProjectReactor { |
| 44 | 47 | String content = replaceFileContent(file, groupIdNew, artifactIdNew, packageNameNew, titleNew); |
| 45 | 48 | writeFile(file, content, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew); |
| 46 | 49 | }); |
| 47 | - log.info("[main][重写完成]"); | |
| 50 | + log.info("[main][重写完成]共耗时:{} 秒", (System.currentTimeMillis() - start) / 1000); | |
| 48 | 51 | } |
| 49 | 52 | |
| 50 | 53 | private static String getProjectBaseDir() { |
| 51 | - // noinspection ConstantConditions | |
| 52 | - return StrUtil.subBefore(ProjectReactor.class.getClassLoader().getResource("").getFile(), | |
| 53 | - "/yudao-server", false); | |
| 54 | + return StrUtil.subBefore(new File(ProjectReactor.class.getClassLoader().getResource(File.separator).getFile()).getPath(), File.separator + "yudao-server", false); | |
| 54 | 55 | } |
| 55 | 56 | |
| 56 | 57 | private static Collection<File> listFiles(String projectBaseDir) { |
| 57 | 58 | Collection<File> files = FileUtils.listFiles(new File(projectBaseDir), null, true); |
| 58 | - files.removeIf(file -> file.getPath().contains("/target/")); | |
| 59 | - files.removeIf(file -> file.getPath().contains("/node_modules/")); | |
| 60 | - files.removeIf(file -> file.getPath().contains("/.idea/")); // 移除 IDEA 自身的文件 | |
| 61 | - files.removeIf(file -> file.getPath().contains("/.git/")); // 移除 Git 自身的文件 | |
| 62 | - files.removeIf(file -> file.getPath().contains("/dist/")); // 移除 Node 编译出来的 | |
| 59 | + // 移除 IDEA Git GitHub 自身的文件; Node 编译出来的文件 | |
| 60 | + files = files.stream() | |
| 61 | + .filter(file -> !file.getPath().contains(File.separator + "target" + File.separator) | |
| 62 | + && !file.getPath().contains(File.separator + "node_modules" + File.separator) | |
| 63 | + && !file.getPath().contains(File.separator + ".idea" + File.separator) | |
| 64 | + && !file.getPath().contains(File.separator + ".git" + File.separator) | |
| 65 | + && !file.getPath().contains(File.separator + ".github" + File.separator) | |
| 66 | + && !file.getPath().contains(File.separator + "dist" + File.separator) | |
| 67 | + && !file.getPath().contains(".iml") | |
| 68 | + && !file.getPath().contains(".html.gz")) | |
| 69 | + .collect(Collectors.toList()); | |
| 63 | 70 | return files; |
| 64 | 71 | } |
| 65 | 72 | |
| ... | ... | @@ -77,11 +84,10 @@ public class ProjectReactor { |
| 77 | 84 | private static void writeFile(File file, String fileContent, String projectBaseDir, |
| 78 | 85 | String projectBaseDirNew, String packageNameNew, String artifactIdNew) { |
| 79 | 86 | String newPath = file.getPath().replace(projectBaseDir, projectBaseDirNew) // 新目录 |
| 80 | - .replace(PACKAGE_NAME.replaceAll("\\.", File.separator), | |
| 81 | - packageNameNew.replaceAll("\\.", File.separator)) | |
| 87 | + .replace(PACKAGE_NAME.replaceAll("\\.", Matcher.quoteReplacement(File.separator)), | |
| 88 | + packageNameNew.replaceAll("\\.", Matcher.quoteReplacement(File.separator))) | |
| 82 | 89 | .replace(ARTIFACT_ID, artifactIdNew) // |
| 83 | 90 | .replaceAll(StrUtil.upperFirst(ARTIFACT_ID), StrUtil.upperFirst(artifactIdNew)); |
| 84 | 91 | FileUtil.writeUtf8String(fileContent, newPath); |
| 85 | 92 | } |
| 86 | - | |
| 87 | 93 | } | ... | ... |