Roh*_*bhu 20 gradle-kotlin-dsl
我有一个多项目构建,而且我经常发现自己锁定了所有工件的版本。所以在我的根项目中,我定义了类似的东西:
project.extra.set("pkgVersions", mapOf(
"kotlin" to "1.2.0",
"jooq" to "3.10.2"
))
val pkgVersions : Map<String, String> by project.extra
plugins {
base
kotlin("jvm") version "1.2.0" apply false
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以pkgVersions在任何地方使用,包括其他子项目:
val pkgVersions by rootProject.extra
jooq {
version = pkgVersions["jooq"]
}
Run Code Online (Sandbox Code Playgroud)
我无法在插件块中这样做:
plugins {
kotlin("jvm") version pkgVersions["kotlin"]
}
Run Code Online (Sandbox Code Playgroud)
给我错误“隐式接收器无法在此上下文中调用 pkgVersions。如果需要,请使用显式一个”。我假设这是因为隐式接收器应该是文件的 JVM 印象?但它正在使用PluginDependencySpec. 尝试使用this@仅显示的自动完成this@plugin。这只是我的一个长期猜测。但是,关于我应该做什么的任何指示?
另外,虽然我们是在它,有没有一种方法来创建一个全球型的gradle-kotlin-dsl,例如:
data class MyBuildType(..)
Run Code Online (Sandbox Code Playgroud)
并且在不使用的情况下随处可用buildSrc?它非常简单,buildSrc我不介意使用它,但只是想知道。
小智 9
根据文档(参见约束语法小节)
«plugin version» 和 «plugin id» 必须是常量、文字、字符串
以下段落中还有一些与您的问题相关的其他说明:
plugins {} 块也必须是构建脚本中的顶级语句。它不能嵌套在另一个结构中(例如 if 语句或 for 循环)。
只能在构建脚本中使用
plugins {} 块目前只能在项目的构建脚本中使用。它不能在脚本插件、settings.gradle 文件或初始化脚本中使用。
Gradle 的未来版本将取消此限制。
所以现在不可能做到这一点。
有一种解决方法可以提取插件版本并在之后使用它,但我个人觉得它很丑陋并且更喜欢使用显式版本。
显然,如果过去不可能的话,这最近已经成为可能。(几乎)来自文档:
gradle.properties:
helloPluginVersion=1.0.0
Run Code Online (Sandbox Code Playgroud)
settings.gradle.kts:
helloPluginVersion=1.0.0
Run Code Online (Sandbox Code Playgroud)
现在文档说那build.gradle.kts应该是空的,但我的测试表明你仍然需要这个build.gradle.kts:
pluginManagement {
val helloPluginVersion: String by settings
plugins {
id("com.example.hello") version helloPluginVersion
}
}
Run Code Online (Sandbox Code Playgroud)
版本现在由我们想要的决定settings.gradle.kts,因此由gradle.properties哪个决定......
build.gradle.kts root
buildscript {
val kotlinVersion by rootProject.extra { "1.3.10" }
...
}
Run Code Online (Sandbox Code Playgroud)
build.gradle.kts module
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${rootProject.extra.get("kotlinVersion")}")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9090 次 |
| 最近记录: |