首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在插件块中引用kotlin gradle脚本变量

在插件块中引用kotlin gradle脚本变量
EN

Stack Overflow用户
提问于 2018-06-06 00:03:57
回答 1查看 1K关注 0票数 2

一段时间以来,我一直在使用常用的Groovy构建脚本DSL用几种语言编写Gradle插件。最近,我想学习如何使用他们的Kotlin构建脚本DSL,但我不太明白一些事情。

下面是我的一个例子:

代码语言:javascript
复制
val kotlin_version = "1.2.41"

plugins {
    application
    kotlin("jvm").version(kotlin_version)
}

application {
    mainClassName = "samples.HelloWorldKt"
}

dependencies {
    compile(kotlin("stdlib"))
}

repositories {
    jcenter()
}

然而,当我运行一个简单的任务,比如'clean',我得到了下面的错误:

代码语言:javascript
复制
* What went wrong:
Script compilation error:

  Line 5:     kotlin("jvm") version kotlin_version
                                    ^ Unresolved reference: kotlin_version

但是,如果我将kotlin_version替换为字符串文字,它就能正常工作:

代码语言:javascript
复制
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_version参数化dependencies块,它就能很好地工作:

代码语言:javascript
复制
dependencies {
    compile(kotlin("stdlib", kotlin_version))
}

为什么不能在plugins块内引用变量?

EN

回答 1

Stack Overflow用户

发布于 2018-06-06 06:37:29

参见文档:https://docs.gradle.org/current/userguide/plugins.html#sec:constrained_syntax基本上,它声明插件版本必须是常量、文字、字符串。

它是由DslMaker实现的:https://kotlinlang.org/docs/reference/type-safe-builders.html#scope-control-dslmarker-since-11

如果您想在其他地方重用变量,您可以使用以下代码:

代码语言:javascript
复制
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"
}

如果不需要,可以简单地内联变量kotlin_version的内容

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50704499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档