一键改包
现在项目中包命名都包含 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 在重新生成。