我試圖了解在 Gradle、Kotlin DSL 中應用插件的所有方式。 這個問題回答了我的部分問題,但不是全部(我猜方法已經在過去的六年中增加了)。
我在我的一個build.gradle.kts檔案中看到了這個確切的場景。
plugins{
`kotlin-dsl`
kotlin("jvm") version "1.6.10"
id("com.foo.bar.someplugin") version 1.2.3
}
apply("foo2.bar2.anotherplugin")
哇,這是應用插件的四種不同方式,我根本不了解它們之間的關系。從另一個答案中,我知道這apply(...)是傳統方式,最終會被棄用,但其他三個呢?
此外,我對為什么`kotlin-dsl`甚至不需要版本感到困惑。這是什么伏都教魔法?
最后,為了一致性起見,我想標準化插件塊(讓我們忽略apply(...)它,因為它是遺留功能),以便一切都使用id(...). 我如何轉換另外兩個?
uj5u.com熱心網友回復:
實際上,您已經確定了兩種方式: buildscript 依賴項 apply和plugins塊。您的插件塊中的內容實際上只是幫助程式:
id("some.plugin.id") version "version"是用ID和版本注冊插件的基本方式kotlin()實際上只是 Kotlin DSL 提供的一個輔助函式,它id()在org.jetbrains.kotlin.您傳遞的任何字串之前使用前綴在后臺呼叫。所以在你的情況下它相當于id("org.jetbrains.kotlin.jvm")kotlin-dsl也是一個輔助函式,它是 Kotlin DSL Gradle 插件的快捷方式。我相信字串 ID 是org.gradle.kotlin.kotlin-dsl.
在應用插件的傳統方式中,您必須在buildscript塊中宣告對插件的依賴關系,以便將插件的類添加到類路徑中以編譯/執行 Gradle 腳本本身。第二步,呼叫apply實際上會將插件應用到當前專案。
有了pluginsblock,兩者同時發生,使用起來更方便。您還可以apply false在插件宣告之后添加,以便將其添加到類路徑而不將其應用于專案:
plugins {
id("com.foo.bar.someplugin") version 1.2.3 apply false
}
如果您想在根專案中宣告所有插件及其版本,然后只需使用plugins不帶版本的塊在子專案中應用相關插件,這將非常有用:
plugins {
id("com.foo.bar.someplugin")
}
此外,我對為什么
kotlin-dsl甚至不需要版本感到困惑。這是什么伏都教魔法?
從上面的解釋中可以看出,任何已經在類路徑上的插件都不需要版本。這適用于已在父專案或settings.gradle(.kts)'s 中宣告的插件plugins以及內置 Gradle 插件。
Kotlin DSL 插件是一個內置的 Gradle 插件,因此它使用的版本取決于您使用的 Gradle 版本。它類似于java或application插件。
還明確建議避免在檔案中為其指定版本:
避免為 kotlin-dsl 插件指定版本。每個 Gradle 版本都旨在與特定版本的 kotlin-dsl 插件一起使用,并且不保證任意 Gradle 版本和 kotlin-dsl 插件版本之間的兼容性。在構建中使用意外版本的 kotlin-dsl 插件會發出警告,并可能導致難以診斷的問題。
現在至于你的另一個問題:
我想標準化插件塊(讓我們忽略 apply(...) 因為它是遺留功能),以便一切都使用 id(...)。我如何轉換另外兩個?
它們在這里的書寫方式非常地道,所以這應該被認為是“標準”。這實際上是建議在檔案中使用它的方式。使用kotlin-dsl是區分內置 Gradle 插件和第三方插件的好方法。此外,它是一種宣告插件的型別安全方式,IDE 可以理解它,您可以搜索參考等。字串在這方面稍遜一籌。
如果您真的真的想將它與基于字串的語法一起應用,您可能可以使用id("org.gradle.kotlin.kotlin-dsl"),但到目前為止我從未見過一個專案這樣做。
該kotlin()助手可以更有爭議的,以及個人品味的問題,但IMO少任意的字串,就更好了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/384494.html
標籤:科特林 等级 gradle插件 gradle-kotlin-dsl
上一篇:將json值添加到物件串列中
