使用插件 DSL 添加 Kotlin 插件
Adding Kotlin plugins using plugins DSL
看起来有两种使用插件 DSL 声明 一些 Kotlin 插件的方法:使用 id()
方法和 kotlin()
方法。例如,可以使用 id("kotlin-android")
或 kotlin("android")
. This is also the case for kapt
but not for parcelize
添加 android 插件。为什么不能是 kotlin("parcelize")
?这种差异是有原因的吗?我试图查找相关文档,但这并没有让我走得太远。
TL;DR:获取 Parcelize 的 Gradle 插件 ID 并使用 org.jetbrains.kotlin.
之后的所有内容
plugins {
kotlin("plugin.parcelize") version "1.6.10"
}
kotlin(...)
函数是 Gradle Kotlin DSL 的一部分。是extends
的扩展函数
- PluginDependenciesSpec,
plugins {}
块
- DependencyHandler,
dependencies {}
块
我将重点介绍插件扩展功能。此答案的部分内容适用于依赖扩展。
kotlin(...)
源代码
它是生成的所以很难看到源代码。我翻遍了 GitHub 并在 GenerateKotlinDependencyExtensions.kt
中找到了它
fun PluginDependenciesSpec.kotlin(module: String): PluginDependencySpec =
id("org.jetbrains.kotlin.$module")
(已编辑,以显示最终结果)
kotlin(...)
= id("org.jetbrains.kotlin.$module")
所以没什么特别的。这是 id(...)
的 Kotlin-specific 快捷方式。所以如果你
- 获取 Parcelize、
org.jetbrains.kotlin.plugin.parcelize
、 的插件 ID
- 并删除
kotlin(...)
函数添加的位 (org.jetbrains.kotlin.
),
- 你还剩下
plugin.parcelize
。
NOTE Because this is in the plugins {}
block, it's working on the Gradle plugin ID (org.jetbrains.kotlin.plugin.parcelize
), not the Maven coordinates (org.jetbrains.kotlin:kotlin-gradle-plugin
).
plugins {
// these two are equivalent
// id("org.jetbrains.kotlin.plugin.parcelize")
kotlin("plugin.parcelize")
}
哦等等...它不起作用??
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)
“构建失败并出现异常”- 插件版本
这是因为与 DependencyHandler.kotlin(...)
扩展不同,PluginDependenciesSpec.kotlin(...)
不包含版本 。它在错误消息中说:“插件依赖项必须包含版本号”
所以要解决它,添加一个版本号。
plugins {
kotlin("plugin.parcelize") version "1.6.10"
}
其他 Kotlin 插件
the other Kotlin plugins也是如此。例如...
plugins {
// https://kotlinlang.org/docs/all-open-plugin.html
kotlin("plugin.allopen") version "1.6.10"
// https://kotlinlang.org/docs/all-open-plugin.html#spring-support
kotlin("plugin.spring") version "1.6.10"
// https://kotlinlang.org/docs/no-arg-plugin.html
kotlin("plugin.noarg") version "1.6.10"
// I can't find a Gradle Plugin ID for
// https://kotlinlang.org/docs/sam-with-receiver-plugin.html
// so this won't work!
// kotlin("kotlin-sam-with-receiver") version "1.6.10"
}
看起来有两种使用插件 DSL 声明 一些 Kotlin 插件的方法:使用 id()
方法和 kotlin()
方法。例如,可以使用 id("kotlin-android")
或 kotlin("android")
. This is also the case for kapt
but not for parcelize
添加 android 插件。为什么不能是 kotlin("parcelize")
?这种差异是有原因的吗?我试图查找相关文档,但这并没有让我走得太远。
TL;DR:获取 Parcelize 的 Gradle 插件 ID 并使用 org.jetbrains.kotlin.
plugins {
kotlin("plugin.parcelize") version "1.6.10"
}
kotlin(...)
函数是 Gradle Kotlin DSL 的一部分。是extends
- PluginDependenciesSpec,
plugins {}
块 - DependencyHandler,
dependencies {}
块
我将重点介绍插件扩展功能。此答案的部分内容适用于依赖扩展。
kotlin(...)
源代码
它是生成的所以很难看到源代码。我翻遍了 GitHub 并在 GenerateKotlinDependencyExtensions.kt
中找到了它fun PluginDependenciesSpec.kotlin(module: String): PluginDependencySpec =
id("org.jetbrains.kotlin.$module")
(已编辑,以显示最终结果)
kotlin(...)
= id("org.jetbrains.kotlin.$module")
所以没什么特别的。这是 id(...)
的 Kotlin-specific 快捷方式。所以如果你
- 获取 Parcelize、
org.jetbrains.kotlin.plugin.parcelize
、 的插件 ID
- 并删除
kotlin(...)
函数添加的位 (org.jetbrains.kotlin.
), - 你还剩下
plugin.parcelize
。
NOTE Because this is in the
plugins {}
block, it's working on the Gradle plugin ID (org.jetbrains.kotlin.plugin.parcelize
), not the Maven coordinates (org.jetbrains.kotlin:kotlin-gradle-plugin
).
plugins {
// these two are equivalent
// id("org.jetbrains.kotlin.plugin.parcelize")
kotlin("plugin.parcelize")
}
哦等等...它不起作用??
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)
“构建失败并出现异常”- 插件版本
这是因为与 DependencyHandler.kotlin(...)
扩展不同,PluginDependenciesSpec.kotlin(...)
不包含版本 。它在错误消息中说:“插件依赖项必须包含版本号”
所以要解决它,添加一个版本号。
plugins {
kotlin("plugin.parcelize") version "1.6.10"
}
其他 Kotlin 插件
the other Kotlin plugins也是如此。例如...
plugins {
// https://kotlinlang.org/docs/all-open-plugin.html
kotlin("plugin.allopen") version "1.6.10"
// https://kotlinlang.org/docs/all-open-plugin.html#spring-support
kotlin("plugin.spring") version "1.6.10"
// https://kotlinlang.org/docs/no-arg-plugin.html
kotlin("plugin.noarg") version "1.6.10"
// I can't find a Gradle Plugin ID for
// https://kotlinlang.org/docs/sam-with-receiver-plugin.html
// so this won't work!
// kotlin("kotlin-sam-with-receiver") version "1.6.10"
}