Gradle - 在编译时执行自定义注解处理器

6
我有一个自定义注解处理器(扩展了AbstractProcessor),它基于注解向项目添加属性文件。我希望每次编译时都能运行此处理器。该项目是使用Gradle的Java项目。
如何在编译期间运行注解处理器?我应该使用一些编译器插件吗?还是应该编写一个简单的Gradle任务来调用此注解处理器,并将该任务作为编译任务的一部分?(我是Gradle的初学者)
在META-INF/services中,添加了javax.annotation.processing.Processor条目,指定了自定义注解处理器类。
2个回答

3

我知道这个问题很老,但因为它甚至得到了一个青睐而没有人回答,所以我想至少给未来的读者一个小小的答案。

对于这个问题,有多种可能的方法,这取决于您的环境设置方式。

例如,您可以在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'。<-- 我从未尝试过这种方法,所以可能不正确。


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'])
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接