java使用gradle任务生成源代码,该任务基于带有注释的现有类
我正在创建springboot应用程序,大部分时间我都在为我的模型编写样板代码—存储库、服务、控制器、构建器。。。我不想那样做强>
根据我的经验、以前的工作和研究,我的脑海中形成了一个概念。基本上如下:
- 我创建了一个注释
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface CodeGenSubject {
}
- 我创建了一个处理器
public class MyProcessor extends AbstractProcessor {
@Override
public Set<String> getSupportedAnnotationTypes() {
return Collections.singleton(CodeGenSubject.class.getCanonicalName());
}
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
for(Element e: roundEnvironment.getElementsAnnotatedWith(CodeGenSubject.class)){
// Observe fields and methods with reflection API
// "Write" some code with JavaPoet
// Place the generated code to the src/java folder
// (with javax.annotation.processing.Filer)
}
}
}
- 我编写特定于域的类
@CodeGenSubject
@Entity
public class MyDomainSpecificEntity {
@Id
private Long id;
private String stuff;
// getters and setters
}
- 最后,我创建了一个gradle任务(?)李>
task myCodeGeneratorTask(type: ???, group: "", desription: "") {
// With this I am stuck
}
理想情况下,此模板生成器将是一个单独的模块
我看过一些示例项目(主要针对安卓),然后我发现最有希望的是:
https://www.baeldung.com/java-annotation-processing-builder
很好,但是。。。它使用maven,代码被放置在一个完全不可穿透的存储库中,并带有pom。根项目中的xml文件,只有几千行。谢谢:D
现在,我正在使用springboot应用程序开发一个示例多模块gradle项目。我有一个实体(MyDomainSpecificEntity),我正试图让gradle根据我的注释和处理器为我生成一些源代码
首先,如果我在概念上是错误的,最大的帮助是一些建议
第二,如果我不是,我会感谢一些帮助与格雷德尔脚本
最后。。。最好的例子是一个清理过的项目,如果有人玩过这个话题,并且有某种形式的公开回购,那将是最受欢迎的
谢谢
# 1 楼答案
实际上,我已经使用了这个概念,并且在github(gradle-boilerplate-generator-plugin)上有一个开源的gradle插件,可以生成样板文件
它是一个通用插件,用于生成任何类型的样板文件(用户可以使用简单的YAML描述符、FreeMarker模板和gradle闭包配置来定义自己的样板文件,而不是使用您喜欢的带有注释的java类)。默认情况下,该插件附带一些演示样板
实际上,其中一个演示样板包括(开箱即用)一个名为
boilerplateWebServiceResource
的任务,用于生成典型web服务资源所需的典型实体、DTO、Repo、控制器、资源等类Its documentation非常详细地介绍了如何使用、配置和扩展它(创建自定义样板文件)。它可能不是你想要的东西;但是你可以给我一些建议,问题,提出意见,修改意见,或者从中得到一些想法。希望这有帮助