Commit d6333fc353441ce22486f5f67f04191bb3ec4d12

Authored by YunaiV
1 parent fc4b677b

增加 ProjectReactor 程序,实现一键改包名

yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/util/TenantUtils.java
@@ -32,5 +32,4 @@ public class TenantUtils { @@ -32,5 +32,4 @@ public class TenantUtils {
32 } 32 }
33 } 33 }
34 34
35 -  
36 } 35 }
yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java
@@ -38,7 +38,7 @@ public class FileServiceTest extends BaseDbUnitTest { @@ -38,7 +38,7 @@ public class FileServiceTest extends BaseDbUnitTest {
38 public void testGetFilePage() { 38 public void testGetFilePage() {
39 // mock 数据 39 // mock 数据
40 FileDO dbFile = randomPojo(FileDO.class, o -> { // 等会查询到 40 FileDO dbFile = randomPojo(FileDO.class, o -> { // 等会查询到
41 - o.setId("yudao"); 41 + o.setId("yunai");
42 o.setType("jpg"); 42 o.setType("jpg");
43 o.setCreateTime(buildTime(2021, 1, 15)); 43 o.setCreateTime(buildTime(2021, 1, 15));
44 }); 44 });
@@ -47,17 +47,17 @@ public class FileServiceTest extends BaseDbUnitTest { @@ -47,17 +47,17 @@ public class FileServiceTest extends BaseDbUnitTest {
47 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> o.setId("tudou"))); 47 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> o.setId("tudou")));
48 // 测试 type 不匹配 48 // 测试 type 不匹配
49 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { 49 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> {
50 - o.setId("yudao02"); 50 + o.setId("yunai02");
51 o.setType("png"); 51 o.setType("png");
52 })); 52 }));
53 // 测试 createTime 不匹配 53 // 测试 createTime 不匹配
54 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { 54 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> {
55 - o.setId("yudao03"); 55 + o.setId("yunai03");
56 o.setCreateTime(buildTime(2020, 1, 15)); 56 o.setCreateTime(buildTime(2020, 1, 15));
57 })); 57 }));
58 // 准备参数 58 // 准备参数
59 FilePageReqVO reqVO = new FilePageReqVO(); 59 FilePageReqVO reqVO = new FilePageReqVO();
60 - reqVO.setId("yudao"); 60 + reqVO.setId("yunai");
61 reqVO.setType("jp"); 61 reqVO.setType("jp");
62 reqVO.setBeginCreateTime(buildTime(2021, 1, 10)); 62 reqVO.setBeginCreateTime(buildTime(2021, 1, 10));
63 reqVO.setEndCreateTime(buildTime(2021, 1, 20)); 63 reqVO.setEndCreateTime(buildTime(2021, 1, 20));
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
@@ -163,7 +163,7 @@ public class UserController { @@ -163,7 +163,7 @@ public class UserController {
163 public void importTemplate(HttpServletResponse response) throws IOException { 163 public void importTemplate(HttpServletResponse response) throws IOException {
164 // 手动创建导出 demo 164 // 手动创建导出 demo
165 List<UserImportExcelVO> list = Arrays.asList( 165 List<UserImportExcelVO> list = Arrays.asList(
166 - UserImportExcelVO.builder().username("yudao").deptId(1L).email("yudao@iocoder.cn").mobile("15601691300") 166 + UserImportExcelVO.builder().username("yunai").deptId(1L).email("yunai@iocoder.cn").mobile("15601691300")
167 .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(), 167 .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(),
168 UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") 168 UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300")
169 .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build() 169 .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build()
yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java
@@ -92,9 +92,9 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest { @@ -92,9 +92,9 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest {
92 // 准备参数 92 // 准备参数
93 ErrorCodePageReqVO reqVO = new ErrorCodePageReqVO(); 93 ErrorCodePageReqVO reqVO = new ErrorCodePageReqVO();
94 reqVO.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); 94 reqVO.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType());
95 - reqVO.setApplicationName("yudao"); 95 + reqVO.setApplicationName("tu");
96 reqVO.setCode(1); 96 reqVO.setCode(1);
97 - reqVO.setMessage("yu"); 97 + reqVO.setMessage("ma");
98 reqVO.setBeginCreateTime(buildTime(2020, 11, 1)); 98 reqVO.setBeginCreateTime(buildTime(2020, 11, 1));
99 reqVO.setEndCreateTime(buildTime(2020, 11, 30)); 99 reqVO.setEndCreateTime(buildTime(2020, 11, 30));
100 100
@@ -112,16 +112,16 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest { @@ -112,16 +112,16 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest {
112 private ErrorCodeDO initGetErrorCodePage() { 112 private ErrorCodeDO initGetErrorCodePage() {
113 ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到 113 ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到
114 o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); 114 o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType());
115 - o.setApplicationName("yudaoyuanma"); 115 + o.setApplicationName("tudou");
116 o.setCode(1); 116 o.setCode(1);
117 - o.setMessage("yudao"); 117 + o.setMessage("yuanma");
118 o.setCreateTime(buildTime(2020, 11, 11)); 118 o.setCreateTime(buildTime(2020, 11, 11));
119 }); 119 });
120 errorCodeMapper.insert(dbErrorCode); 120 errorCodeMapper.insert(dbErrorCode);
121 // 测试 type 不匹配 121 // 测试 type 不匹配
122 errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType()))); 122 errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType())));
123 // 测试 applicationName 不匹配 123 // 测试 applicationName 不匹配
124 - errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setApplicationName("yunai"))); 124 + errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setApplicationName("yuan")));
125 // 测试 code 不匹配 125 // 测试 code 不匹配
126 errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setCode(2))); 126 errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setCode(2)));
127 // 测试 message 不匹配 127 // 测试 message 不匹配
@@ -138,9 +138,9 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest { @@ -138,9 +138,9 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest {
138 // 准备参数 138 // 准备参数
139 ErrorCodeExportReqVO reqVO = new ErrorCodeExportReqVO(); 139 ErrorCodeExportReqVO reqVO = new ErrorCodeExportReqVO();
140 reqVO.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); 140 reqVO.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType());
141 - reqVO.setApplicationName("yudao"); 141 + reqVO.setApplicationName("tu");
142 reqVO.setCode(1); 142 reqVO.setCode(1);
143 - reqVO.setMessage("yu"); 143 + reqVO.setMessage("ma");
144 reqVO.setBeginCreateTime(buildTime(2020, 11, 1)); 144 reqVO.setBeginCreateTime(buildTime(2020, 11, 1));
145 reqVO.setEndCreateTime(buildTime(2020, 11, 30)); 145 reqVO.setEndCreateTime(buildTime(2020, 11, 30));
146 146
yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java
@@ -201,7 +201,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @@ -201,7 +201,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest {
201 SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> { // 等会查询到 201 SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> { // 等会查询到
202 o.setType(SmsTemplateTypeEnum.PROMOTION.getType()); 202 o.setType(SmsTemplateTypeEnum.PROMOTION.getType());
203 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 203 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
204 - o.setCode("yudaoyuanma"); 204 + o.setCode("tudou");
205 o.setContent("芋道源码"); 205 o.setContent("芋道源码");
206 o.setApiTemplateId("yunai"); 206 o.setApiTemplateId("yunai");
207 o.setChannelId(1L); 207 o.setChannelId(1L);
@@ -226,7 +226,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @@ -226,7 +226,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest {
226 SmsTemplatePageReqVO reqVO = new SmsTemplatePageReqVO(); 226 SmsTemplatePageReqVO reqVO = new SmsTemplatePageReqVO();
227 reqVO.setType(SmsTemplateTypeEnum.PROMOTION.getType()); 227 reqVO.setType(SmsTemplateTypeEnum.PROMOTION.getType());
228 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); 228 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
229 - reqVO.setCode("yudao"); 229 + reqVO.setCode("tu");
230 reqVO.setContent("芋道"); 230 reqVO.setContent("芋道");
231 reqVO.setApiTemplateId("yu"); 231 reqVO.setApiTemplateId("yu");
232 reqVO.setChannelId(1L); 232 reqVO.setChannelId(1L);
@@ -247,7 +247,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @@ -247,7 +247,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest {
247 SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> { // 等会查询到 247 SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> { // 等会查询到
248 o.setType(SmsTemplateTypeEnum.PROMOTION.getType()); 248 o.setType(SmsTemplateTypeEnum.PROMOTION.getType());
249 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 249 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
250 - o.setCode("yudaoyuanma"); 250 + o.setCode("tudou");
251 o.setContent("芋道源码"); 251 o.setContent("芋道源码");
252 o.setApiTemplateId("yunai"); 252 o.setApiTemplateId("yunai");
253 o.setChannelId(1L); 253 o.setChannelId(1L);
@@ -272,7 +272,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @@ -272,7 +272,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest {
272 SmsTemplateExportReqVO reqVO = new SmsTemplateExportReqVO(); 272 SmsTemplateExportReqVO reqVO = new SmsTemplateExportReqVO();
273 reqVO.setType(SmsTemplateTypeEnum.PROMOTION.getType()); 273 reqVO.setType(SmsTemplateTypeEnum.PROMOTION.getType());
274 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); 274 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
275 - reqVO.setCode("yudao"); 275 + reqVO.setCode("tu");
276 reqVO.setContent("芋道"); 276 reqVO.setContent("芋道");
277 reqVO.setApiTemplateId("yu"); 277 reqVO.setApiTemplateId("yu");
278 reqVO.setChannelId(1L); 278 reqVO.setChannelId(1L);
yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java
@@ -176,7 +176,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest { @@ -176,7 +176,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
176 }), eq(RoleTypeEnum.SYSTEM.getType()))).thenReturn(200L); 176 }), eq(RoleTypeEnum.SYSTEM.getType()))).thenReturn(200L);
177 // mock 用户 300L 177 // mock 用户 300L
178 when(userService.createUser(argThat(user -> { 178 when(userService.createUser(argThat(user -> {
179 - assertEquals("yudao", user.getUsername()); 179 + assertEquals("yunai", user.getUsername());
180 assertEquals("yuanma", user.getPassword()); 180 assertEquals("yuanma", user.getPassword());
181 assertEquals("芋道", user.getNickname()); 181 assertEquals("芋道", user.getNickname());
182 assertEquals("15601691300", user.getMobile()); 182 assertEquals("15601691300", user.getMobile());
@@ -190,7 +190,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest { @@ -190,7 +190,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
190 o.setPackageId(100L); 190 o.setPackageId(100L);
191 o.setStatus(randomCommonStatus()); 191 o.setStatus(randomCommonStatus());
192 o.setDomain("https://www.iocoder.cn"); 192 o.setDomain("https://www.iocoder.cn");
193 - o.setUsername("yudao"); 193 + o.setUsername("yunai");
194 o.setPassword("yuanma"); 194 o.setPassword("yuanma");
195 }); 195 });
196 196
yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java
@@ -175,12 +175,12 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -175,12 +175,12 @@ public class UserServiceImplTest extends BaseDbUnitTest {
175 @Test 175 @Test
176 public void testUpdateUserPassword_success() { 176 public void testUpdateUserPassword_success() {
177 // mock 数据 177 // mock 数据
178 - AdminUserDO dbUser = randomAdminUserDO(o -> o.setPassword("encode:yudao")); 178 + AdminUserDO dbUser = randomAdminUserDO(o -> o.setPassword("encode:tudou"));
179 userMapper.insert(dbUser); 179 userMapper.insert(dbUser);
180 // 准备参数 180 // 准备参数
181 Long userId = dbUser.getId(); 181 Long userId = dbUser.getId();
182 UserProfileUpdatePasswordReqVO reqVO = randomPojo(UserProfileUpdatePasswordReqVO.class, o -> { 182 UserProfileUpdatePasswordReqVO reqVO = randomPojo(UserProfileUpdatePasswordReqVO.class, o -> {
183 - o.setOldPassword("yudao"); 183 + o.setOldPassword("tudou");
184 o.setNewPassword("yuanma"); 184 o.setNewPassword("yuanma");
185 }); 185 });
186 // mock 方法 186 // mock 方法
@@ -272,7 +272,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -272,7 +272,7 @@ public class UserServiceImplTest extends BaseDbUnitTest {
272 AdminUserDO dbUser = initGetUserPageData(); 272 AdminUserDO dbUser = initGetUserPageData();
273 // 准备参数 273 // 准备参数
274 UserPageReqVO reqVO = new UserPageReqVO(); 274 UserPageReqVO reqVO = new UserPageReqVO();
275 - reqVO.setUsername("yudao"); 275 + reqVO.setUsername("tu");
276 reqVO.setMobile("1560"); 276 reqVO.setMobile("1560");
277 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); 277 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
278 reqVO.setBeginTime(buildTime(2020, 12, 1)); 278 reqVO.setBeginTime(buildTime(2020, 12, 1));
@@ -296,7 +296,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -296,7 +296,7 @@ public class UserServiceImplTest extends BaseDbUnitTest {
296 AdminUserDO dbUser = initGetUserPageData(); 296 AdminUserDO dbUser = initGetUserPageData();
297 // 准备参数 297 // 准备参数
298 UserExportReqVO reqVO = new UserExportReqVO(); 298 UserExportReqVO reqVO = new UserExportReqVO();
299 - reqVO.setUsername("yudao"); 299 + reqVO.setUsername("tu");
300 reqVO.setMobile("1560"); 300 reqVO.setMobile("1560");
301 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); 301 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
302 reqVO.setBeginTime(buildTime(2020, 12, 1)); 302 reqVO.setBeginTime(buildTime(2020, 12, 1));
@@ -319,7 +319,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -319,7 +319,7 @@ public class UserServiceImplTest extends BaseDbUnitTest {
319 private AdminUserDO initGetUserPageData() { 319 private AdminUserDO initGetUserPageData() {
320 // mock 数据 320 // mock 数据
321 AdminUserDO dbUser = randomAdminUserDO(o -> { // 等会查询到 321 AdminUserDO dbUser = randomAdminUserDO(o -> { // 等会查询到
322 - o.setUsername("yudaoyuanma"); 322 + o.setUsername("tudou");
323 o.setMobile("15601691300"); 323 o.setMobile("15601691300");
324 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 324 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
325 o.setCreateTime(buildTime(2020, 12, 12)); 325 o.setCreateTime(buildTime(2020, 12, 12));
@@ -327,7 +327,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -327,7 +327,7 @@ public class UserServiceImplTest extends BaseDbUnitTest {
327 }); 327 });
328 userMapper.insert(dbUser); 328 userMapper.insert(dbUser);
329 // 测试 username 不匹配 329 // 测试 username 不匹配
330 - userMapper.insert(ObjectUtils.cloneIgnoreId(dbUser, o -> o.setUsername("yuanma"))); 330 + userMapper.insert(ObjectUtils.cloneIgnoreId(dbUser, o -> o.setUsername("dou")));
331 // 测试 mobile 不匹配 331 // 测试 mobile 不匹配
332 userMapper.insert(ObjectUtils.cloneIgnoreId(dbUser, o -> o.setMobile("18818260888"))); 332 userMapper.insert(ObjectUtils.cloneIgnoreId(dbUser, o -> o.setMobile("18818260888")));
333 // 测试 status 不匹配 333 // 测试 status 不匹配
yudao-server/src/test/java/cn/iocoder/yudao/ProjectReactor.java 0 → 100644
  1 +package cn.iocoder.yudao;
  2 +
  3 +import cn.hutool.core.io.FileUtil;
  4 +import cn.hutool.core.util.StrUtil;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.apache.commons.io.FileUtils;
  7 +
  8 +import java.io.File;
  9 +import java.nio.charset.StandardCharsets;
  10 +import java.util.Collection;
  11 +
  12 +/**
  13 + * 项目修改器,一键替换 Maven 的 groupId、artifactId,项目的 package 等
  14 + *
  15 + * 通过修改 groupIdNew、artifactIdNew、projectBaseDirNew 三个变量
  16 + *
  17 + * @author 芋道源码
  18 + */
  19 +@Slf4j
  20 +public class ProjectReactor {
  21 +
  22 + private static final String GROUP_ID = "cn.iocoder.boot";
  23 + private static final String ARTIFACT_ID = "yudao";
  24 + private static final String PACKAGE_NAME = "cn.iocoder.yudao";
  25 +
  26 + public static void main(String[] args) {
  27 + String projectBaseDir = getProjectBaseDir();
  28 + // ========== 配置,需要你手动修改 ==========
  29 + String groupIdNew = "cn.star.gg";
  30 + String artifactIdNew = "star";
  31 + String packageNameNew = "cn.start.pp";
  32 + String projectBaseDirNew = projectBaseDir + "-new";
  33 + // ========== ==========
  34 +
  35 + // 获得需要复制的文件
  36 + log.info("[main][开始获得需要重写的文件]");
  37 + Collection<File> files = listFiles(projectBaseDir);
  38 + log.info("[main][需要重写的文件数量:{},预计需要 5-10 秒]", files.size());
  39 + // 写入文件
  40 + files.forEach(file -> {
  41 + String content = replaceFileContent(file, groupIdNew, artifactIdNew, packageNameNew);
  42 + writeFile(file, content, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew);
  43 + });
  44 + log.info("[main][重写完成]");
  45 + }
  46 +
  47 + private static String getProjectBaseDir() {
  48 + // noinspection ConstantConditions
  49 + return StrUtil.subBefore(ProjectReactor.class.getClassLoader().getResource("").getFile(),
  50 + "/yudao-server", false);
  51 + }
  52 +
  53 + private static Collection<File> listFiles(String projectBaseDir) {
  54 + Collection<File> files = FileUtils.listFiles(new File(projectBaseDir), null, true);
  55 + files.removeIf(file -> file.getPath().contains("/target/"));
  56 + files.removeIf(file -> file.getPath().contains("/node_modules/"));
  57 + files.removeIf(file -> file.getPath().contains("/.idea/")); // 移除 IDEA 自身的文件
  58 + files.removeIf(file -> file.getPath().contains("/.git/")); // 移除 Git 自身的文件
  59 + files.removeIf(file -> file.getPath().contains("/dist/")); // 移除 Node 编译出来的
  60 + return files;
  61 + }
  62 +
  63 + private static String replaceFileContent(File file, String groupIdNew,
  64 + String artifactIdNew, String packageNameNew) {
  65 + return FileUtil.readString(file, StandardCharsets.UTF_8)
  66 + .replaceAll(GROUP_ID, groupIdNew)
  67 + .replaceAll(PACKAGE_NAME, packageNameNew)
  68 + .replaceAll(ARTIFACT_ID, artifactIdNew) // 必须放在最后替换,因为 ARTIFACT_ID 太短!
  69 + .replaceAll(StrUtil.upperFirst(ARTIFACT_ID), StrUtil.upperFirst(artifactIdNew));
  70 + }
  71 +
  72 + private static void writeFile(File file, String fileContent, String projectBaseDir,
  73 + String projectBaseDirNew, String packageNameNew, String artifactIdNew) {
  74 + String newPath = file.getPath().replace(projectBaseDir, projectBaseDirNew) // 新目录
  75 + .replace(PACKAGE_NAME.replaceAll("\\.", "/"), packageNameNew.replaceAll("\\.", "/"))
  76 + .replace(ARTIFACT_ID, artifactIdNew) //
  77 + .replaceAll(StrUtil.upperFirst(ARTIFACT_ID), StrUtil.upperFirst(artifactIdNew));
  78 + FileUtil.writeUtf8String(fileContent, newPath);
  79 + }
  80 +
  81 +}