# project-generate **Repository Path**: kristas/project-generate ## Basic Information - **Project Name**: project-generate - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-23 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Project Generate ### 简介 自动生成项目代码 内涵Maven项目生成器demo ### 安装 #### 部署插件 ```shell # 克隆项目 https://gitee.com/kristas/project-generate.git # 安装到maven仓库 mvn install ``` #### 引入依赖 ```xml project-generate-core org.kristas.tool 1.0-SNAPSHOT ``` ### 使用 #### 创建配置文件 ##### generate-config.yml ```yaml # maven项目示例 # 父项目 parent: group_id: "org.kristas.cloud" artifact_id: "microservice-dependencies" version: "1.0-SNAPSHOT" # 子项目 artifact_id: "microservice-service-user" app_name: "service-user" package_name: "org.kristas.cloud.service" ``` #### 创建模板文件 ##### stater.java ```java package %s; //%s 作为保留字符,后期从配置中加载 import com.accenture.cloud.core.launch.SfaApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.ComponentScan; import tk.mybatis.spring.annotation.MapperScan; /** * @author kristas * @describe: * @date %s */ @EnableCaching @SpringCloudApplication @EnableFeignClients(basePackages = {"org.kristas.cloud"}) @ComponentScan({"org.kristas.cloud"}) @MapperScan("org.kristas.cloud.service.mapper") public class %s { public static void main(String[] args) { SpringBootApplication.run(%s.class, args); } } ``` #### 创建Pack项目 ##### ApplicationPack.java ```java import org.kristas.tool.generate.api.FileAncContent; import org.kristas.tool.generate.api.Pack; import org.kristas.tool.generate.tool.ContextHelper; import org.kristas.tool.generate.tool.DateTool; import java.util.Arrays; /** * @author kristas * @describe: * @date 2020/04/09 */ // 实现Pack接口 public class ApplicationPack extends Pack { //设置目标文件夹路径 @Override public String setDir() { return ContextHelper.workDir(); } //配置生成目标文件 @Override public void setFileAndContent(FileAncContent fileAndContent) { StringBuilder name = new StringBuilder(); //首字母大写 Arrays.asList(ContextHelper.getAttribute("artifact_id").split("-")) .forEach(s -> name.append( s.substring(0, 1).toUpperCase() + s.substring(1))); name.append("Application"); //配置文件环境 fileAndContent //文件名,路径依据 setDir() 方法中设定的路径 .setFile(name.toString()+".java") //通过读取模板文件设置文件内容 .setContentByRead( //第一个参数为使用的模板文件名 ContextHelper.useTemplate("stater.java"), //之后n个参数为填充模板文件中的%s ContextHelper.getAttribute("package_name"), DateTool.now(), name.toString(), name.toString()); } } ``` #### 创建运行类 ##### Run.java ```java /** * @author kristas * @describe: * @date 2020/03/10 */ public class Run { public static void main(String[] args) { String root = "C:/Workspace/SFA/SFA-CLOUD/sfa-generate/src/main/resources"; MavenGenerator generator = new MavenGenerator(); generator.initial() //设置配置文件路径 .loadConfig(root + "/generate-config.yml") //设置生成项目路径 .at("C:/test") //设置模板文件目录路径 .loadTemplates(root + "/templates") .accept() .prepare() //接受实现了Pack项目的类 .receive(ApplicationPack.class) .accept() //生成 .generate(); } } ``` ### 自定义扩展 #### [interface] Context.java 自定义配置文件结构与加载方法 通过加载配置文件实例化的上下文环境 ```java //加载配置文件方法 void load(String configFile); //获取键值方法 String getAttribute(String key); //添加键值方法 void addAttribute(String key,String value); ```