Gradle 6 settings.gradle.kts 属性问题

c0n*_*ere 6 gradle gradle-kotlin-dsl

请帮助我了解 Gradle 6 中的更改,因此以下代码不再起作用(在 Gradle 5 中运行良好):

val artifactoryUser: String by settings
val artifactoryPassword: String by settings

pluginManagement {
    repositories {
        mavenLocal()
        maven {
            url = uri("https://internal-artifactory")
            credentials {
                username = artifactoryUser
                password = artifactoryPassword
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个错误:“未解决的引用:artifactoryUser”。

这个问题可以通过在 pluginManagement 块中移动属性声明来解决

pluginManagement {
val artifactoryUser: String by settings
val artifactoryPassword: String by settings
    repositories {
        mavenLocal()
        maven {
            url = uri("https://internal-artifactory")
            credentials {
                username = artifactoryUser
                password = artifactoryPassword
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么。

Bjø*_*ter 5

其原因在6级升级说明中提到:

设置脚本中的pluginManagement 块现已隔离

以前,设置脚本内的任何pluginManagement {} 块都会在脚本正常执行期间执行。

现在,它们会以与 buildscript {} 或插件 {} 类似的方式提前执行。这意味着此类块内的代码无法引用脚本中其他地方声明的任何内容。

进行此更改后,在解析设置脚本本身的插件时也可以应用pluginManagement 配置。