首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将ext.*变量放入build.gradle.kts中的插件块

如何将ext.*变量放入build.gradle.kts中的插件块
EN

Stack Overflow用户
提问于 2017-09-05 11:11:00
回答 3查看 7.7K关注 0票数 21

我的构建文件如下所示:

代码语言:javascript
运行
复制
val nexusBaseUri: String by extra
val gradle_version: String by extra
val kotlin_version: String by extra

buildscript {
    val nexusBaseUri by extra { "https://mynexusserver/nexus" }
    val gradle_version by extra { "4.1" }
    val kotlin_version by extra { "1.1.4-3" }
    val springBoot_version by extra { "2.0.0.M3" }

    repositories {
        maven { url = uri("$nexusBaseUri/repository/public") }
        jcenter()
        maven { url = uri("http://repo.spring.io/snapshot") }
        maven { url = uri("http://repo.spring.io/milestone") }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBoot_version")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
        classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version")
    }
}

plugins {
    application
    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    // the following line causes a problem
    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    kotlin("jvm", kotlin_version)
}

apply {
    plugin("kotlin-spring")
    plugin("org.springframework.boot")
    plugin("io.spring.dependency-management")
}

application {
    mainClassName = "eqip.fid.FdmlInterpreterDeveloperAppKt"
}

repositories {
    maven { url = uri("$nexusBaseUri/content/groups/public") }
    jcenter()
    maven { url = uri("http://repo.spring.io/snapshot") }
    maven { url = uri("http://repo.spring.io/milestone") }
}

dependencies {
    compile(kotlin("stdlib"))
    compile("org.springframework.boot:spring-boot-starter-web")
}

tasks {
    "wrapper"(Wrapper::class) {
        gradleVersion = gradle_version
    }
}

我在IntelliJ中遇到的错误是

‘'val kotlin_version: String’不能在这个上下文中被隐式接收者调用。必要时使用显式的

我该怎么解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2017-11-27 09:21:10

您可以在plugins中定义一个版本,然后使该版本在块之外可访问,例如在dependencies部分中。

代码语言:javascript
运行
复制
plugins {
    kotlin("jvm").version("1.1.61")
}

//This is necessary to make the version accessible in other places
val kotlinVersion: String? by extra {
    buildscript.configurations["classpath"]
            .resolvedConfiguration.firstLevelModuleDependencies
            .find { it.moduleName == "kotlin-gradle-plugin" }?.moduleVersion
}

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

对于1.2+版本,您必须用kotlin-gradle-plugin org.jetbrains.kotlin.jvm.gradle.plugin替换

票数 4
EN

Stack Overflow用户

发布于 2020-04-20 17:47:11

我一直在测试如何定义项目buildscript块内部和外部的属性,但它似乎不起作用。如果您想要访问与依赖相关的属性,工作和推荐的解决方案是定义一个buildSrc模块(检查这个github回购),然后使用所需的属性(版本、字符串.)添加一个Kotlin /Class。类似于:

代码语言:javascript
运行
复制
object Dependency {

    object Foundation {

        const val KOTLIN = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Version.Global.KOTLIN}"
        const val RANDOM_VERSION = "1.2.3"
    }

您可以访问buildSrc模块中声明的任何内容,因为在其中声明的组件在初始化阶段是解析的,如果我没有弄错的话。用法示例如下:

代码语言:javascript
运行
复制
plugins {
    val kotlin = Dependency.Foundation.KOTLIN
    kotlin("kapt").version(Dependency.Foundation.RANDOM_VERSION)
}

更多信息,这里

票数 0
EN

Stack Overflow用户

发布于 2018-08-07 13:39:30

UPD不工作,很抱歉搞混了。

原来的答案:

--

另一个解决方法是使用const val编译时常量:

代码语言:javascript
运行
复制
object Defs {
    const val kotlinVersion = "1.2.60"
}

buildscript {
    val kotlinVersion:String by extra { Defs.kotlinVersion }
}

plugins {
    kotlin("jvm") version Defs.kotlinVersion
}
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46053522

复制
相关文章

相似问题

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