访问settings.gradle中存储在gradle.properties中的点属性

x80*_*486 14 groovy gradle

我有一个Gradle 6.0.1项目。(摘录build.gradle)看起来像:

\n\n
plugins {\n  id "application"\n  id "com.github.edeandrea.xjc-generation"\n  id "eclipse"\n  id "idea"\n  id "java"\n  id "org.springframework.boot"\n}\n\n...\n\ndependencies {\n  implementation platform("org.springframework.boot:spring-boot-dependencies:${property("spring-boot.version")}")\n\n  // ...more stuff here\n}\n\n// ...more stuff here\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在管理以下位置的所有插件版本settings.gradle

\n\n
pluginManagement {\n  plugins {\n    id "application"\n    id "com.github.edeandrea.xjc-generation" version "1.0"\n    id "eclipse"\n    id "idea"\n    id "java"\n    id "org.springframework.boot" version "${spring-boot.version}"\n  }\n}\n\nrootProject.name = "spring-core"\n
Run Code Online (Sandbox Code Playgroud)\n\n

...我通常将工件版本放在gradle.properties

\n\n
#\n# Dependency Versions\noracle.version = 18.3.0.0\nspring-boot.version = 2.2.1.RELEASE\n\n#\n# Gradle Settings\norg.gradle.configureondemand = false\norg.gradle.daemon = false\n\n#\n# System Settings\nsystemProp.file.encoding = UTF-8\nsystemProp.sun.jnu.encoding = UTF-8\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在的问题是我无法以与我已经尝试使用的 \xe2\x80\x94内部相同的方式读取settings.gradle(来自)中的点属性。gradle.propertiesbuild.gradle${property("spring-boot.version")}

\n\n

有什么办法可以实现这一点吗?我可以轻松地将密钥更改为类似的东西springBootVersion并且它可以工作,但我想知道是否有一种方法可以以我目前的方式拥有它:spring-boot.version

\n

dag*_*ett 8

使用getProperty("spring-boot.version")


具有其他变体的简单 gradle 项目


task test{
    doLast {
        //success
        println project.property('aaa.bbb.ccc')
        println project.'aaa.bbb.ccc'
        println getProperty('aaa.bbb.ccc')

        //failure: Could not get unknown property 'aaa.bbb.ccc' for task ':test' of type org.gradle.api.DefaultTask
        println property('aaa.bbb.ccc') 
    }
}
Run Code Online (Sandbox Code Playgroud)

gradle.properties

aaa.bbb.ccc=12345
Run Code Online (Sandbox Code Playgroud)

property('aaa.bbb.ccc')失败,因为它尝试获取当前对象(任务)但aaa.bbb.ccc为项目定义的属性

然而project.property('aaa.bbb.ccc')成功是因为它应该

project.'aaa.bbb.ccc'project.getProperty('aaa.bbb.ccc')与groovy 中的相同

project.getProperty('aaa.bbb.ccc')由于常规基本对象GroovyObject(IHMO)而有效

并且getProperty(name)没有前缀,实际上位于org.gradle.groovy.scripts.BasicScript中,并且没有真正记录...


Rob*_*rdi 5

对我来说,@daggett 的解决方案不起作用。但我能够通过以下方式访问内部定义的~/.gradle/gradle.properties属性settings.gradle

settings.ext.find('MY_PROPERTY')
Run Code Online (Sandbox Code Playgroud)

为了提供一些上下文,我使用它来读取 Gradle Build Cache Node 远程服务器的凭据:

buildCache {
    boolean isCiServer = System.getenv().containsKey("CI")
    remote(HttpBuildCache) {
        enabled = settings.ext.find('GRADLE_BUILD_CACHE_NODE_PWD') != null
        url = 'https://myserver:443/cache/'
        allowUntrustedServer = true
        push = isCiServer
        credentials {
            username = settings.ext.find('GRADLE_BUILD_CACHE_NODE_USR')
            password = settings.ext.find('GRADLE_BUILD_CACHE_NODE_PWD')
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑
另一个不需要使用的解决方案ext

username = settings.hasProperty('GRADLE_BUILD_CACHE_NODE_USR') ? settings.GRADLE_BUILD_CACHE_NODE_USR : null
Run Code Online (Sandbox Code Playgroud)

  • `settings.extra.properties["my.property"]` 在 Kotlin DSL 和 Gradle 8 中为我工作 (3认同)