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); //压缩文件夹 File zip = new File(new File(destPath).getParent(), new File(destPath).getName() + ".zip"); ZipUtil.compressToZip(destPath, zip.getParent(), zip.getName()); //删除原来的文件夹 FileUtil.deleteFileDir(new File(destPath)); return zip.getAbsolutePath(); } private void replaceSettings(String path) throws Exception { FileUtils.replaceFileContent(path + "/pom.xml", "com.ks", String.format("%s", getGroupId(pks))); FileUtils.replaceFileContent(path + "/pom.xml", "demo", String.format("%s", getArtifactId(pks))); FileUtils.replaceFileContent(path + "/app/pom.xml", "com.ks", String.format("%s", getGroupId(subpks))); FileUtils.replaceFileContent(path + "/app/pom.xml", "demo", String.format("%s", 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 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")); } }