如何在我的 gradle 插件中动态地将参数传递给 kapt 编译器?
How to pass arguments to kapt compiler dynamicly inside my gradle plugin?
我目前正在编写一个 Gradle 插件来向注释处理器注入一些参数。在基于 Java 的 Android 项目中使用 annotationProcessor
时效果很好。当我在基于 Kotlin 的项目中尝试 kapt
时,它没有工作,因为 kapt
从它自己的配置中收集了参数。
到目前为止我做了什么:
val args = variant.javaCompileOptions.annotationProcessorOptions.arguments
args["key"] = "value"
我对 kapt
参数传递的了解是,您可以通过其在 build.gradle、link 中的扩展来设置它们:
kapt {
arguments {
arg("key", "value")
}
}
那么如何在我的 gradle 插件中动态地将参数传递给 kapt 编译器?谢谢。
不幸的是,它没有得到很好的记录,我之前已经 运行 解决过这个问题。这是我做的
在您的插件 apply
函数中执行此操作(目标是应用插件的 gradle 项目)。如果您将插件应用到您的根项目中,那么只需将相同的代码放入 target.subProjects{...}
target.afterEvaluate{
target.plugins.all {
when (it) {
is AppPlugin -> {
extensions[AppExtension::class].run {
configureJavaCompilerArguments("option1", "option2")
}
}
//if your project has a library that requires/use kapt also do this
is LibraryPlugin -> {
extensions[LibraryExtension::class].run {
configureJavaCompilerArguments("option1", "option2")
}
}
}
}
}
为简单起见,我声明了一个花哨的扩展函数来添加参数
fun BaseExtension.configureJavaCompilerArguments(option1:String, option2: String) {
with(defaultConfig.javaCompileOptions.annotationProcessorOptions) {
includeCompileClasspath = true
arguments(mapOf(
"some.key.in.your.ap.1" to option1,
"some.key.in.your.ap.2" to option2
))
}
}
还有这个我从 Butter-knife
源代码
中获取的奇特函数
internal operator fun <T : Any> ExtensionContainer.get(type: KClass<T>): T {
return getByType(type.java)
}
现在在您的注解处理器中只需声明对这些选项的兴趣指定相同的键!!这非常重要。
编码愉快!
我目前正在编写一个 Gradle 插件来向注释处理器注入一些参数。在基于 Java 的 Android 项目中使用 annotationProcessor
时效果很好。当我在基于 Kotlin 的项目中尝试 kapt
时,它没有工作,因为 kapt
从它自己的配置中收集了参数。
到目前为止我做了什么:
val args = variant.javaCompileOptions.annotationProcessorOptions.arguments
args["key"] = "value"
我对 kapt
参数传递的了解是,您可以通过其在 build.gradle、link 中的扩展来设置它们:
kapt {
arguments {
arg("key", "value")
}
}
那么如何在我的 gradle 插件中动态地将参数传递给 kapt 编译器?谢谢。
不幸的是,它没有得到很好的记录,我之前已经 运行 解决过这个问题。这是我做的
在您的插件 apply
函数中执行此操作(目标是应用插件的 gradle 项目)。如果您将插件应用到您的根项目中,那么只需将相同的代码放入 target.subProjects{...}
target.afterEvaluate{
target.plugins.all {
when (it) {
is AppPlugin -> {
extensions[AppExtension::class].run {
configureJavaCompilerArguments("option1", "option2")
}
}
//if your project has a library that requires/use kapt also do this
is LibraryPlugin -> {
extensions[LibraryExtension::class].run {
configureJavaCompilerArguments("option1", "option2")
}
}
}
}
}
为简单起见,我声明了一个花哨的扩展函数来添加参数
fun BaseExtension.configureJavaCompilerArguments(option1:String, option2: String) {
with(defaultConfig.javaCompileOptions.annotationProcessorOptions) {
includeCompileClasspath = true
arguments(mapOf(
"some.key.in.your.ap.1" to option1,
"some.key.in.your.ap.2" to option2
))
}
}
还有这个我从 Butter-knife
源代码
internal operator fun <T : Any> ExtensionContainer.get(type: KClass<T>): T {
return getByType(type.java)
}
现在在您的注解处理器中只需声明对这些选项的兴趣指定相同的键!!这非常重要。
编码愉快!