在插件块中引用kotlin gradle脚本变量
一段时间以来,我一直在使用常用的Groovy构建脚本DSL用几种语言编写Gradle插件。最近我想学习如何使用他们的Kotlin构建脚本DSL,但有些事情我还不太清楚 我举了一个例子:在插件块中引用kotlin gradle脚本变量,gradle,kotlin,gradle-kotlin-dsl,Gradle,Kotlin,Gradle Kotlin Dsl,一段时间以来,我一直在使用常用的Groovy构建脚本DSL用几种语言编写Gradle插件。最近我想学习如何使用他们的Kotlin构建脚本DSL,但有些事情我还不太清楚 我举了一个例子: val kotlin_version = "1.2.41" plugins { application kotlin("jvm").version(kotlin_version) } application { mainClassName = "samples.HelloWorldKt
val kotlin_version = "1.2.41"
plugins {
application
kotlin("jvm").version(kotlin_version)
}
application {
mainClassName = "samples.HelloWorldKt"
}
dependencies {
compile(kotlin("stdlib"))
}
repositories {
jcenter()
}
但是,当我运行一个简单的任务(如“clean”)时,会出现以下错误:
* What went wrong:
Script compilation error:
Line 5: kotlin("jvm") version kotlin_version
^ Unresolved reference: kotlin_version
但是,如果我将kotlin_version
替换为字符串文字,它可以正常工作:
val kotlin_version = "1.2.41"
plugins {
application
// kotlin("jvm").version(kotlin_version)
kotlin("jvm").version("1.2.41")
}
application {
mainClassName = "samples.HelloWorldKt"
}
dependencies {
compile(kotlin("stdlib"))
}
repositories {
jcenter()
}
但是,如果我用我的kotlin_版本
参数化依赖项
块,它就可以很好地工作:
dependencies {
compile(kotlin("stdlib", kotlin_version))
}
为什么不能在插件
块中引用变量?参见文档:
基本上,它声明插件版本必须是常量、文本、字符串
它由DslMaker实现:
如果要在其他地方重用变量,可以使用以下方法:
buildscript {
var kotlinVersion: String by extra { "1.2.41" }
repositories {
jcenter()
}
dependencies {
classpath(kotlin("gradle-plugin", kotlinVersion))
}
}
plugins {
application
}
application {
mainClassName = "samples.HelloWorldKt"
}
apply {
plugin("kotlin")
plugin("application")
}
val kotlinVersion: String by extra
repositories {
jcenter()
}
dependencies {
compile(kotlin("stdlib-jdk8", kotlinVersion))
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
buildscript{
var-kotlinVersion:extra{“1.2.41”}的字符串
存储库{
jcenter()
}
依赖关系{
类路径(kotlin(“gradle插件”,kotlin))
}
}
插件{
应用
}
应用{
mainClassName=“samples.HelloWorldKt”
}
申请{
插件(“kotlin”)
插件(“应用程序”)
}
val kotlinVersion:通过额外的字符串
存储库{
jcenter()
}
依赖关系{
编译(kotlin(“stdlib-jdk8”,kotlinVersion))
}
tasks.withType{
kotlinOptions.jvmTarget=“1.8”
}
如果不需要,您可以简单地内联变量kotlin\u version