diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java new file mode 100644 index 00000000..d53018d1 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java @@ -0,0 +1,66 @@ +package org.jeecg.config.init; + +import cn.hutool.core.io.FileUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.net.URL; +import java.nio.charset.StandardCharsets; + +/** + * 自动初始化代码生成器模板 + *

+ * 解决JAR发布需要手工配置代码生成器模板问题 + * http://doc.jeecg.com/2043922 + */ +@Slf4j +@Component +public class CodeTemplateInitListener implements ApplicationListener { + + @Override + public void onApplicationEvent(ApplicationReadyEvent event) { + try { + log.info(" --- 检测启动环境: 如果是JAR模式,则初始化生成器模板到config目录中 --- "); + this.initJarConfigCodeGeneratorTemplate(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * ::Jar包启动模式下:: + * 初始化代码生成器模板文件 + */ + private void initJarConfigCodeGeneratorTemplate() throws Exception { + //1.获取jar同级下的config路径 + String configPath = System.getProperty("user.dir") + File.separator + "config" + File.separator; + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource[] resources = resolver.getResources("classpath*:jeecg/code-template-online/**/*"); + for (Resource re : resources) { + URL url = re.getURL(); + String filepath = url.getPath(); + //System.out.println("native url= " + filepath); + filepath = java.net.URLDecoder.decode(filepath, "utf-8"); + //System.out.println("decode url= " + filepath); + + //2.在config下,创建jeecg/code-template-online/*模板 + String createFilePath = configPath + filepath.substring(filepath.indexOf("jeecg/code-template-online")); + + // 非jar模式不生成模板 + // 不生成目录,只生成具体模板文件 + if (!filepath.contains(".jar!/BOOT-INF/lib/") || !createFilePath.contains(".")) { + continue; + } + if (!FileUtil.exist(createFilePath)) { + log.debug("create file codeTemplate = " + createFilePath); + FileUtil.writeString(IOUtils.toString(url, StandardCharsets.UTF_8), createFilePath, "UTF-8"); + } + } + } +}