package com.ks.codegenerator.utils;
|
|
import org.yeshi.utils.FileUtil;
|
import org.yeshi.utils.StringUtil;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* @author hxh
|
* @title: ServiceUtil
|
* @description: TODO
|
* @date 2021/11/13 14:50
|
*/
|
public class ServiceBuilder {
|
|
|
private String name;
|
private String pks;
|
private String subpks;
|
private String cacheDir;
|
|
|
public ServiceBuilder setName(String name) {
|
this.name = name;
|
return this;
|
}
|
|
public ServiceBuilder setPks(String pks) {
|
this.pks = pks;
|
return this;
|
}
|
|
public ServiceBuilder setSubpks(String subpks) {
|
this.subpks = subpks;
|
return this;
|
}
|
|
public ServiceBuilder setCacheDir(String cacheDir) {
|
this.cacheDir = cacheDir;
|
return this;
|
}
|
|
/**
|
* @return void
|
* @author hxh
|
* @description 生成服务
|
* @date 14:51 2021/11/13
|
**/
|
public String build() throws Exception {
|
String destPath = String.format("%s/%s/%s", cacheDir, System.currentTimeMillis() + "", name);
|
System.out.println(destPath);
|
//copy文件夹
|
FileUtils.copyFileDir(ServiceBuilder.class.getClassLoader().getResource("code/service").getPath(), destPath);
|
//删除target
|
if (new File(destPath + "/target").exists()) {
|
FileUtil.deleteFileDir(new File(destPath + "/target"));
|
}
|
if (new File(destPath + "/app/target").exists()) {
|
FileUtil.deleteFileDir(new File(destPath + "/app/target"));
|
}
|
|
//修改文件名称与文件夹名称
|
renameDir(destPath);
|
//重新命名包名
|
renamePackage(destPath + "/app/src/main/java/com/ks/app");
|
replaceSettings(destPath);
|
//压缩文件夹
|
ZipUtil.compressToZip(destPath, new File(destPath).getParent(), new File(destPath).getName() + ".zip");
|
//删除原来的文件夹
|
FileUtil.deleteFileDir(new File(destPath));
|
return destPath;
|
}
|
|
private void replaceSettings(String path) throws Exception {
|
|
FileUtils.replaceFileContent(path + "/pom.xml", "<groupId>com.ks</groupId>", String.format("<groupId>%s</groupId>", getGroupId(pks)));
|
FileUtils.replaceFileContent(path + "/pom.xml", "<artifactId>demo</artifactId>", String.format("<artifactId>%s</artifactId>", getArtifactId(pks)));
|
|
FileUtils.replaceFileContent(path + "/app/pom.xml", "<groupId>com.ks</groupId>", String.format("<groupId>%s</groupId>", getGroupId(subpks)));
|
FileUtils.replaceFileContent(path + "/app/pom.xml", "<artifactId>demo</artifactId>", String.format("<artifactId>%s</artifactId>", getArtifactId(subpks)));
|
|
FileUtils.replaceFileContent(path + "/app/src/main/resources/application-dev.yml", "com.ks.app", subpks);
|
FileUtils.replaceFileContent(path + "/app/src/main/resources/application-pro.yml", "com.ks.app", subpks);
|
}
|
|
//重新命名文件夹与文件
|
private void renameDir(String path) throws Exception {
|
FileUtils.renameFile(path + "/service.iml", name + ".iml");
|
//更改java文件的路径
|
FileUtils.copyFileDir(path + "/app/src/main/java/com/ks/app", path + "/app/src/main/java/" + subpks.replace(".", "/"));
|
new File(path + "/app/src/main/java/com/ks/app").delete();
|
}
|
|
|
//重新命名包名
|
private void renamePackage(String path) throws Exception {
|
if (!new File(path).exists()) {
|
throw new Exception("文件不存在");
|
}
|
|
if (new File(path).isDirectory()) {
|
File[] fs = new File(path).listFiles();
|
for (File f : fs) {
|
if (f.isFile()) {
|
FileUtils.replaceFileContent(f.getPath(), "package com.ks.app", "package " + subpks);
|
FileUtils.replaceFileContent(f.getPath(), "import com.ks.app.", "import " + subpks + ".");
|
} else {
|
renamePackage(f.getPath());
|
}
|
}
|
}
|
}
|
|
private static String getGroupId(String pks) {
|
String[] sts = pks.split("\\.");
|
List<String> list = new ArrayList<>();
|
for (int i = 0; i < sts.length - 1; i++) {
|
list.add(sts[i]);
|
}
|
return StringUtil.concat(list, ".");
|
}
|
|
private static String getArtifactId(String pks) {
|
String[] sts = pks.split("\\.");
|
return sts[sts.length - 1];
|
}
|
|
public static void main(String[] args) throws Exception {
|
System.out.println(getGroupId("com.ks.app"));
|
}
|
|
|
}
|