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 次 |
最近记录: |