Quest是一个开源的代码生成框架,允许用户通过编写脚本来自动生成Java代码块。该项目可以作为依赖库被其他项目引入使用。
- 自动注解扫描 - 自动扫描项目中带有
@AgentComment注解的类和@AgentMethod注解的方法 - 脚本解析 - 使用ANTLR解析自定义的Quest脚本语言
- 代码生成 - 将脚本转换为可执行的Java代码块
- Markdown导出 - 将生成的代码集中导出到Markdown文档中
在您的项目pom.xml中添加Quest依赖:
<dependency>
<groupId>cn.easygd</groupId>
<artifactId>quest</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>import cn.easygd.quest.runtime.annotation.AgentComment;
import cn.easygd.quest.runtime.annotation.AgentMethod;
@AgentComment
public class UserService {
@AgentMethod
public String getUserById(Long id) {
return "User-" + id;
}
@AgentMethod
public boolean updateUser(String name, Integer age) {
// 实现逻辑
return true;
}
}创建.quest文件:
kind: agent
// 用户处理脚本
int userId = 123
string userName = "张三"
int userAge = 25
if (userId > 0) {
string result = getUserById(userId)
println("查询到用户: " + result)
boolean success = updateUser(userName, userAge)
if (success) {
println("用户信息更新成功")
}
}
QuestRunner runner = new QuestRunner();
Map<String, String> generatedCodes = runner.run(
"com.yourcompany.project", // 目标包名
"./scripts", // 脚本目录
"./output" // 输出目录
);或者使用命令行:
java -jar quest-runner.jar com.yourcompany.project ./scripts ./output主运行类,整合所有功能。
public class QuestRunner {
// 主要运行方法
public Map<String, String> run(String targetPackage,
List<File> scriptFiles,
String outputDir)
// 简化运行方法
public Map<String, String> run(String targetPackage,
String scriptDir,
String outputDir)
}注解扫描器,负责扫描项目中的注解。
脚本引擎,负责解析Quest脚本。
代码生成器,将解析树转换为Java代码。
Markdown导出器,将生成的代码导出为Markdown文档。
Quest脚本支持以下语法特性:
int,long,float,double,boolean,string
// 条件语句
if (condition) {
// 代码块
} else {
// 代码块
}
// 循环语句
for (int i = 0; i < 10; i++) {
// 循环体
}
while (condition) {
// 循环体
}
int x = 10
string name = "test"
boolean flag = true
int[] numbers = [1, 2, 3, 4, 5]
map<string, int> userScores = { "张三": 95, "李四": 87 }
生成的Markdown文件包含:
- 文档头部 - 包含生成时间和统计信息
- 目录 - 快速导航到各个代码块
- 代码块章节 - 每个目标类对应一个章节
- 类信息表格 - 显示类的基本信息
- 方法信息表格 - 显示可用的AgentMethod方法
- 生成的Java代码 - 实际的代码块
- 使用说明 - 如何使用生成的代码
- 合理使用注解 - 只在需要代码生成的类上使用
@AgentComment - 方法命名规范 -
@AgentMethod方法应该有清晰的业务含义 - 脚本组织 - 将相关的脚本放在同一目录下
- 版本控制 - 将生成的代码纳入版本控制系统
- 测试验证 - 对生成的代码进行充分测试
-
找不到注解类
- 确保包名正确
- 检查类路径配置
-
脚本语法错误
- 使用
ScriptEngine.validateSyntax()验证语法 - 检查Quest语法规范
- 使用
-
代码生成失败
- 查看详细日志信息
- 确保目标类和方法可访问
Quest使用SLF4J,可以通过配置文件控制日志级别:
# logback.xml 或 log4j.properties
logger.cn.easygd.quest=DEBUG欢迎提交Issue和Pull Request!
- Fork项目
- 创建特性分支
- 提交更改
- 推送到分支
- 创建Pull Request
MIT License
如有问题,请联系项目维护者或提交GitHub Issue。