# java-starter
**Repository Path**: yangzhen94/java-starter
## Basic Information
- **Project Name**: java-starter
- **Description**: java脚手架生成应用
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-08-28
- **Last Updated**: 2024-09-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
反编译于freemarker-2.3.30-sources.jar。
github上的源码不是maven管理的,我不太熟,并且不想去研究那个东西,所以直接选择了反编译,然后去处理maven依赖。
搭建环境时,做了如下操作:
- 去除了xalan:xalan依赖及代码
- 去除了jdom:jdom依赖及代码
- 去除了javax.servlet:javax.servlet-api依赖及代码
- 去除了org.apache.ant:ant依赖及代码
- 去除了org.python:jython-standalone依赖及代码
- 去除了org.zeroturnaround:javarebel-sdk依赖及代码
以上依赖,有可能是不准确的,去掉相关代码后,是可以跑起来的,并且是按照我的预期进行了测试。
做的改动如下:
- 占位符#{}是freemarker专门针对数字进行渲染,由于一些原因,不再推荐使用这个占位符,虽然是废弃了,但是仍然支持解析。
而我不希望freemarker再去渲染#{}的值,因此,改动了freemarker.core.NumericalOutput#calculateInterpolatedStringOrMarkup方法,直接返回原始的表达式,例如#{test},原操作是freemarker会去数据对象中拿test的值,改造后是直接输出#{test}字符串。
没有改动解析#{}占位符的源码,这是因为,freemarker.core.FMParser这个类是通过FTL.jj文件进行编译的,你可以看freemarker的github源码,里面是找不到这个类的,这个类是在编译时,将FTL.jj文件编译成了class文件。
我不想去研究这个玩意,因为里面写的代码,指向性不强,因此仅在渲染的时候进行了处理,直接返回原字符串。
- 改造了freemarker.core.FMParserTokenManager#getNextToken方法,加了这个判断#if (jjmatchedKind == 83) {jjmatchedKind = 80;}将#{改造为了解析文本的标识
----------------------
规范
- 多module的项目,要把代码合并到一个module中
- 源码可以正常启动,接口调用正常
- 源代码中不允许出现空的占位符#{}
- 代码转换模板的插件,会转义源码中的所有${}占位符,转义后为${r'${}'}
- 自定义模板,除了内置的变量,不允许出现没有转义的${},转义后${r'${}'}
- java/kotlin代码要格式化
关键设计
脚手架模板 和 业务代码模板
脚手架模板中的pom.xml文件,是系统内置的文件,业务代码模板的pom.ftl文件,是扫描到的源文件。