使用Android gradle插件dsl从gradle任务设置参数
我正在为android开发一个gradle插件,该插件必须以编程方式为注释处理器设置参数使用Android gradle插件dsl从gradle任务设置参数,android,kotlin,gradle,annotation-processing,Android,Kotlin,Gradle,Annotation Processing,我正在为android开发一个gradle插件,该插件必须以编程方式为注释处理器设置参数“-AoutputDir=my.path.to.output.dir” 因此,从gradle插件apply()函数中,我引用了所有子项目,并使用 private fun addAnnotationProcessorOptions(rootProject: Project, outDir: File) { rootProject.subprojects { it.also
“-AoutputDir=my.path.to.output.dir”
因此,从gradle插件apply()
函数中,我引用了所有子项目,并使用
private fun addAnnotationProcessorOptions(rootProject: Project, outDir: File) {
rootProject.subprojects {
it.also { project ->
project.afterEvaluate {prj->
prj.plugins.all { plugin ->
when (plugin) {
is AppPlugin -> {
prj.extensions[AppExtension::class].run {
defaultConfig.javaCompileOptions.annotationProcessorOptions.arguments(
mapOf("outdir" to outDir.absolutePath)
)
}
}
is LibraryPlugin -> {
prj.extensions[LibraryExtension::class].run {
defaultConfig.javaCompileOptions.annotationProcessorOptions.arguments(
mapOf("outdir" to outDir.absolutePath)
)
}
}
}
}
}
}
}
}
这与我在每个子项目的构建脚本中所做的相同
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
//HERE is the same call to the same dsl object
javaCompileOptions {
annotationProcessorOptions {
arguments = ['outdir': 'path.to.output']
}
}
}
当我试图在注释处理器中获取参数outdir
时,后者抛出一个异常,抱怨找不到参数outdir
。但是,如果我从构建脚本中设置参数outdir
,它将毫无问题地获取它
我不能从构建脚本中设置参数,因为我的用例指示此配置应该以编程方式完成
PS:我使用了Project.beforevaluate{}
和Project.beforevaluate{}
闭包,但仍然没有成功
知道发生了什么事吗?我的dsl配置被覆盖了吗?是否可以通过代码而不是构建脚本进行设置
提前谢谢