Gradle 用于注释处理的自定义 JavaCompile 任务
Gradle custom JavaCompile task for annotation processing
我正在开发一个 gradle 插件,该插件注册了一个 JavaCompile
应该触发注释处理过程的任务。
这是我目前拥有的
private fun Project.runConfiguration(variants: DomainObjectSet<out BaseVariant>) {
variants.all { variant ->
// Assert Shuttle annotation processor is present or throw exception
val processor = ShuttleProcessor::class.java.canonicalName ?: throw ShuttleCompilerNotFoundException()
val packageName = variant.getPackageName()
val task = tasks.register(
"generateShuttle${variant.name.capitalize()}Sources",
JavaCompile::class.java
) {
it.group = TASK_GROUP
it.source = variant.getSourceFolders(SourceKind.JAVA).first()
it.options.annotationProcessorPath = variant.annotationProcessorConfiguration
it.options.compilerArgs.addAll(listOf(
"-proc:only", "-implicit:none",
"-processor", processor
))
}
variant.registerJavaGeneratingTask(task.get())
}
}
在一个 android 项目中,当我应用我的插件和 运行 使用 gradle 的任务时,到目前为止没有任何反应。我什至尝试在我的处理器的第一行抛出异常,但仍然没有成功。
我是不是遗漏了什么或做错了什么?另外,我如何告诉任务它应该使用 ShuttleProcessor
作为注释处理器。
我正在使用 kotlin
而不是 Groovy
。
谢谢。
我已经找到解决问题的方法。 JavaCompile
任务必须知道我们使用的处理器在哪里。所以缺少的部分是这些行
val classPath = variant.getCompileClasspath(null)
我的任务配置应该包含这些更改
classpath = classPath
options.annotationProcessorPath = classPath
我正在开发一个 gradle 插件,该插件注册了一个 JavaCompile
应该触发注释处理过程的任务。
这是我目前拥有的
private fun Project.runConfiguration(variants: DomainObjectSet<out BaseVariant>) {
variants.all { variant ->
// Assert Shuttle annotation processor is present or throw exception
val processor = ShuttleProcessor::class.java.canonicalName ?: throw ShuttleCompilerNotFoundException()
val packageName = variant.getPackageName()
val task = tasks.register(
"generateShuttle${variant.name.capitalize()}Sources",
JavaCompile::class.java
) {
it.group = TASK_GROUP
it.source = variant.getSourceFolders(SourceKind.JAVA).first()
it.options.annotationProcessorPath = variant.annotationProcessorConfiguration
it.options.compilerArgs.addAll(listOf(
"-proc:only", "-implicit:none",
"-processor", processor
))
}
variant.registerJavaGeneratingTask(task.get())
}
}
在一个 android 项目中,当我应用我的插件和 运行 使用 gradle 的任务时,到目前为止没有任何反应。我什至尝试在我的处理器的第一行抛出异常,但仍然没有成功。
我是不是遗漏了什么或做错了什么?另外,我如何告诉任务它应该使用 ShuttleProcessor
作为注释处理器。
我正在使用 kotlin
而不是 Groovy
。
谢谢。
我已经找到解决问题的方法。 JavaCompile
任务必须知道我们使用的处理器在哪里。所以缺少的部分是这些行
val classPath = variant.getCompileClasspath(null)
我的任务配置应该包含这些更改
classpath = classPath
options.annotationProcessorPath = classPath