android - 使用来自 gradle 任务的 Android gradle 插件 dsl 设置参数
问题描述
我正在为 android 开发一个 gradle 插件,它必须以编程方式为注释处理器设置一个参数。"-AoutputDir=my.path.to.output.dir"
.
因此,从 gradle 插件apply()
函数中,我引用了所有子项目并使用Android gradle 插件 dsl我尝试通过这样做来设置参数
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.beforeEvaluate{}
和Project.afterEvaluate{}
闭包,但仍然没有运气。
知道发生了什么吗?我的 dsl 配置被覆盖了吗?是否可以通过代码设置而不是构建脚本?
提前致谢。
解决方案
推荐阅读
- powershell - 如果不是另一个组的成员,则将用户添加到组的 powershell 脚本
- json - 是否可以使用 jq 将文本文件内容动态注入 JSON 数组对象
- javascript - LinkedIn文章错误阅读时间计算
- rest - Delphi REST 服务器和第 3 方应用程序
- angular - 如何在 ag 网格中获取拖动列定义?
- visual-studio-code - 从 VS Code 复制粘贴到 LO Writer 时,缩进消失了
- python - Vader 词典结果加起来不等于 1.0
- git - 如果我已分阶段更改,如何阻止变基 --skip?
- rust - 为什么我们需要在 Rust 中指定所有依赖项(包括传递)?
- php - Laravel Lighthouse GraphQL 单元测试:“变量未定义”