ima*_*ke_ 5 android kotlin gradle-plugin gradle-kotlin-dsl kotlin-dsl
看起来使用插件 DSL 声明一些Kotlin 插件有两种方法:使用id()方法和kotlin()方法。例如,可以使用 或 添加 androidid("kotlin-android")插件kotlin("android")。对于 也是如此,kapt但对于 则不然parcelize。为什么不能这样呢kotlin("parcelize")?这种差异有原因吗?我尝试查找相关文档,但这并没有让我走得太远。
aSe*_*emy 12
TL;DR:获取 Parcelize 的 Gradle 插件 ID 并使用之后的所有内容org.jetbrains.kotlin.
plugins {
kotlin("plugin.parcelize") version "1.6.10"
}
Run Code Online (Sandbox Code Playgroud)
该kotlin(...)函数是 Gradle Kotlin DSL 的一部分。它是一个扩展函数,可以扩展
plugins {}块dependencies {}块我将重点关注插件扩展功能。其中一些答案适用于依赖项扩展。
kotlin(...)源代码它是生成的,所以很难看到源代码。我翻遍了 GitHub,在GenerateKotlinDependencyExtensions.kt中找到了它
fun PluginDependenciesSpec.kotlin(module: String): PluginDependencySpec =
id("org.jetbrains.kotlin.$module")
Run Code Online (Sandbox Code Playgroud)
(已编辑,以显示最终结果)
kotlin(...)=id("org.jetbrains.kotlin.$module")所以这没什么特别的。这是 Kotlin 特定的快捷方式id(...)。所以如果你
org.jetbrains.kotlin.plugin.parcelize ,kotlin(...)函数添加的位(org.jetbrains.kotlin. ),plugin.parcelize.注意因为它位于
plugins {}块中,所以它作用于 Gradle 插件 ID (org.jetbrains.kotlin.plugin.parcelize),而不是Maven 坐标 (org.jetbrains.kotlin:kotlin-gradle-plugin)。
plugins {
// these two are equivalent
// id("org.jetbrains.kotlin.plugin.parcelize")
kotlin("plugin.parcelize")
}
Run Code Online (Sandbox Code Playgroud)
哦等等...它不起作用?
FAILURE: Build failed with an exception.
* Where:
Build file '/.../build.gradle.kts' line: 3
* What went wrong:
Plugin [id: 'org.jetbrains.kotlin.plugin.parcelize'] was not found in any of the following sources:
- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (plugin dependency must include a version number for this source)
Run Code Online (Sandbox Code Playgroud)
这是因为与DependencyHandler.kotlin(...)扩展不同,它PluginDependenciesSpec.kotlin(...) 不包含版本。它在错误消息中表示:“插件依赖项必须包含版本号”
因此,要解决这个问题,请添加版本号。
FAILURE: Build failed with an exception.
* Where:
Build file '/.../build.gradle.kts' line: 3
* What went wrong:
Plugin [id: 'org.jetbrains.kotlin.plugin.parcelize'] was not found in any of the following sources:
- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (plugin dependency must include a version number for this source)
Run Code Online (Sandbox Code Playgroud)
其他 Kotlin 插件也是如此。例如...
plugins {
kotlin("plugin.parcelize") version "1.6.10"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2838 次 |
| 最近记录: |