Gradle - 在编译期间执行自定义注释处理器

时间:2016-03-11 05:20:50

标签: java gradle annotations

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

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

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

2 个答案:

答案 0 :(得分: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'< - 这可能是错的,因为我从未尝试过这种方式。

答案 1 :(得分:0)

我能够获得注释的唯一方法是直接设置-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'])
}