Commit fcf097847a5bd5b45c68db3cebf3968f7b8bbe53

Authored by YunaiV
1 parent 3e2a809f

reactor:【INFRA 基础设施】代码生成时,区分 boot 还是 cloud 项目

reactor:【INFRA 基础设施】代码生成时,更严格的区分 master 还是 master-jdk17 分支
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
... ... @@ -40,6 +40,7 @@ import jakarta.annotation.PostConstruct;
40 40 import jakarta.annotation.Resource;
41 41 import lombok.Setter;
42 42 import org.springframework.stereotype.Component;
  43 +import org.springframework.util.ClassUtils;
43 44  
44 45 import java.util.*;
45 46  
... ... @@ -64,7 +65,7 @@ public class CodegenEngine {
64 65 * value:生成的路径
65 66 */
66 67 private static final Map<String, String> SERVER_TEMPLATES = MapUtil.<String, String>builder(new LinkedHashMap<>()) // 有序
67   - // Java module-biz Main
  68 + // Java module-biz(server) Main
68 69 .put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO"))
69 70 .put(javaTemplatePath("controller/vo/listReqVO"), javaModuleImplVOFilePath("ListReqVO"))
70 71 .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO"))
... ... @@ -83,7 +84,7 @@ public class CodegenEngine {
83 84 javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl"))
84 85 .put(javaTemplatePath("service/service"),
85 86 javaModuleImplMainFilePath("service/${table.businessName}/${table.className}Service"))
86   - // Java module-biz Test
  87 + // Java module-biz(server) Test
87 88 .put(javaTemplatePath("test/serviceTest"),
88 89 javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceImplTest"))
89 90 // Java module-api Main
... ... @@ -195,6 +196,15 @@ public class CodegenEngine {
195 196 private Boolean jakartaEnable;
196 197  
197 198 /**
  199 + * 是否为 yudao-cloud 项目,用于解决 Boot 和 Cloud 的 api 模块兼容性问题
  200 + *
  201 + * true - 需要有 yudao-module-xxx-api 模块
  202 + * false - 不需要有,使用 api、enum 包即可
  203 + */
  204 + @Setter
  205 + private Boolean cloudEnable;
  206 +
  207 + /**
198 208 * 模板引擎,由 hutool 实现
199 209 */
200 210 private final TemplateEngine templateEngine;
... ... @@ -209,7 +219,11 @@ public class CodegenEngine {
209 219 config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH);
210 220 this.templateEngine = new VelocityEngine(config);
211 221 // 设置 javaxEnable,按照是否使用 JDK17 来判断
212   - this.jakartaEnable = SystemUtil.getJavaInfo().isJavaVersionAtLeast(1700); // 17.00 * 100
  222 + this.jakartaEnable = SystemUtil.getJavaInfo().isJavaVersionAtLeast(1700) // 17.00 * 100
  223 + && ClassUtils.isPresent("jakarta.annotation.Resource", ClassUtils.getDefaultClassLoader());
  224 + // 设置 cloudEnable,按照是否使用 Spring Cloud 来判断
  225 + this.cloudEnable = ClassUtils.isPresent("cn.iocoder.yudao.module.infra.framework.rpc.config.RpcConfiguration",
  226 + ClassUtils.getDefaultClassLoader());
213 227 }
214 228  
215 229 @PostConstruct
... ... @@ -434,6 +448,14 @@ public class CodegenEngine {
434 448 Map<String, String> templates = new LinkedHashMap<>();
435 449 templates.putAll(SERVER_TEMPLATES);
436 450 templates.putAll(FRONT_TEMPLATES.row(frontType));
  451 + // 如果是 Boot 项目,则不使用 api/server 模块
  452 + if (Boolean.FALSE.equals(cloudEnable)) {
  453 + SERVER_TEMPLATES.forEach((templatePath, filePath) -> {
  454 + filePath = StrUtil.replace(filePath, "/yudao-module-${table.moduleName}-api", "");
  455 + filePath = StrUtil.replace(filePath, "/yudao-module-${table.moduleName}-server", "");
  456 + templates.put(templatePath, filePath);
  457 + });
  458 + }
437 459 // 如果禁用单元测试,则移除对应的模版
438 460 if (Boolean.FALSE.equals(codegenProperties.getUnitTestEnable())) {
439 461 templates.remove(javaTemplatePath("test/serviceTest"));
... ... @@ -480,16 +502,16 @@ public class CodegenEngine {
480 502  
481 503 private static String javaModuleImplVOFilePath(String path) {
482 504 return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" +
483   - "vo/${sceneEnum.prefixClass}${table.className}" + path, "biz", "main");
  505 + "vo/${sceneEnum.prefixClass}${table.className}" + path, "server", "main");
484 506 }
485 507  
486 508 private static String javaModuleImplControllerFilePath() {
487 509 return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" +
488   - "${sceneEnum.prefixClass}${table.className}Controller", "biz", "main");
  510 + "${sceneEnum.prefixClass}${table.className}Controller", "server", "main");
489 511 }
490 512  
491 513 private static String javaModuleImplMainFilePath(String path) {
492   - return javaModuleFilePath(path, "biz", "main");
  514 + return javaModuleFilePath(path, "server", "main");
493 515 }
494 516  
495 517 private static String javaModuleApiMainFilePath(String path) {
... ... @@ -497,7 +519,7 @@ public class CodegenEngine {
497 519 }
498 520  
499 521 private static String javaModuleImplTestFilePath(String path) {
500   - return javaModuleFilePath(path, "biz", "test");
  522 + return javaModuleFilePath(path, "server", "test");
501 523 }
502 524  
503 525 private static String javaModuleFilePath(String path, String module, String src) {
... ... @@ -508,7 +530,7 @@ public class CodegenEngine {
508 530  
509 531 private static String mapperXmlFilePath() {
510 532 return "yudao-module-${table.moduleName}/" + // 顶级模块
511   - "yudao-module-${table.moduleName}-biz/" + // 子模块
  533 + "yudao-module-${table.moduleName}-server/" + // 子模块
512 534 "src/main/resources/mapper/${table.businessName}/${table.className}Mapper.xml";
513 535 }
514 536  
... ...
yudao-module-infra/src/main/resources/codegen/java/enums/errorcode.vm
1   -// TODO 待办:请将下面的错误码复制到 yudao-module-${table.moduleName}-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!!
  1 +// TODO 待办:请将下面的错误码复制到 yudao-module-${table.moduleName} 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!!
2 2 // ========== ${table.classComment} TODO 补充编号 ==========
3 3 ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在");
4 4 ## 特殊:树表专属逻辑
... ...