【问题标题】:Gradle - Executing custom annotation processor during compile timeGradle - 在编译期间执行自定义注释处理器
【发布时间】:2016-06-26 06:15:39
【问题描述】:

我有一个自定义注释处理器(扩展了 AbstractProcessor),它根据注释将属性文件添加到项目中。我希望每次编译时都运行它。该项目是一个使用gradle的java项目。

如何在编译期间运行注释处理器?我应该使用一些编译器插件吗?还是我应该编写一个简单的 gradle 任务来调用这个注释处理器并使该任务成为编译任务的一部分? (我是 gradle 的初学者)

  • 在 META-INF/services 中,添加了 javax.annotation.processing.Processor 条目,用于指定自定义注释处理器类。

【问题讨论】:

    标签: java gradle annotations


    【解决方案1】:

    我知道这个问题已经很老了,但由于它甚至得到了帮助,但没有人回答,我想至少给未来的读者一点答案。

    这有多种可能的方式,具体取决于您的环境设置方式。

    例如,您可以在 build.gradle 或其他所有想要的项目使用的 .gradle 文件中使用类似的内容:

    compileJava{
        options.fork = false 
        options.forkOptions.executable = 'javac'
        options.compilerArgs.addAll(['-classpath','path/to/your/compiled/processor.jar'])
    }
    

    当你使用依赖系统时,你可以使用这个:

    dependencies {
      compileClasspath group: 'com.company', name: 'AnnotationProcessor', version: 'your revision' 
      //or this
      compileClasspath 'com.company.AnnotationProcessor:revision'
    }
    

    但请确保在 src/main/resources/META-INF/services 中有此方法的 .Processor 文件。否则,您必须添加 compilerArg '-processor','full.package.name.with.class.name'

    【讨论】:

      【解决方案2】:

      我可以让注释工作的唯一方法是直接设置 -processorpath。

      compileJava{
      
          options.compilerArgs.addAll(['-processorpath',"$rootDir/yoursubproject/annotation.jar"])
          options.compilerArgs.addAll(['-Acom.crd.whomever.processors.pass=Production'])
          options.compilerArgs.addAll(['-XprintRounds'])
          options.compilerArgs.addAll(['-XprintProcessorInfo'])
      }
      

      【讨论】:

        猜你喜欢
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多