基于现有类的Gradle任务生成源代码,并带有注释



我正在创建Springboot应用程序,并且在大多数情况下,我发现自己为我的模型编写样板代码 - 存储库,服务,控制器,建筑商...我不想这样做。

基于我的经验,以前的作品和研究,我在脑海中提出了一种概念。基本上是以下内容:

  1. 我创建注释
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface CodeGenSubject {
}
  1. 我创建一个处理器
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)
        }
    }
}
  1. 我写我的域特定类
@CodeGenSubject
@Entity
public class MyDomainSpecificEntity {
    @Id
    private Long id;
    private String stuff;
    // getters and setters
}
  1. 最后,我创建了一个gradle任务(?(
task myCodeGeneratorTask(type: ???, group: "", desription: "") {
    // With this I am stuck
}

理想情况下,此模板发生器将是一个单独的模块。

我看过一些示例项目(主要是用于Android(,然后我找到了最有前途的项目:

https://www.baeldung.com/java-annotation-processing-builder

是完美的,但是...它使用maven,并且代码放置在根项目中带有pom.xml文件的完全坚不可摧的存储库中,其中几千行。谢谢:D

现在,我正在使用Springboot应用程序进行示例多模块Gradle项目。我有一个实体(mydomainspificentity(,我试图根据我的注释和处理器为我生成一些源代码。

首先,如果我在概念上是错误的,最大的帮助就是一些建议。

其次,如果我不这样做,我将感谢有关该Gradle脚本的一些帮助。

最后...最好的是一个清洁的示例项目,如果有人玩过这个主题,并且拥有某种公共回购,那将是最受欢迎的。

谢谢。

我实际上已经使用了该概念,并在GitHub(Gradle-Boilerplate-generator-plugin(上具有开源的Gradle插件,该插件生成锅炉。

这是生成任何类型的锅炉的通用插件(用户可以使用简单的 yaml descripto, freemarker 基于的模板和gradle cloture配置而不是,而不是Java课程带有您喜欢的注释(。默认情况下,此插件带有一些演示锅炉。

实际上,这些演示锅炉之一包括(开箱即用的(一个名为 boilerplateWebServiceResource的任务,以生成典型的实体,DTO,repo,Controler,资源,资源等。。

它的文档非常详细,详细介绍了如何使用它,配置并扩展它(创建自定义锅板(。这可能不是您要寻找的东西;但是您可以向我发送建议,问题,分叉并修改它,或者只是从中获得想法。希望这可以帮助。

相关内容

  • 没有找到相关文章

最新更新