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

时间:2019-11-22 18:48:09

标签: gradle groovy

我有一个Gradle 6.0.1项目。 build.gradle(节选)如下:

plugins {
  id "application"
  id "com.github.edeandrea.xjc-generation"
  id "eclipse"
  id "idea"
  id "java"
  id "org.springframework.boot"
}

...

dependencies {
  implementation platform("org.springframework.boot:spring-boot-dependencies:${property("spring-boot.version")}")

  // ...more stuff here
}

// ...more stuff here

我正在管理settings.gradle中的所有插件版本:

pluginManagement {
  plugins {
    id "application"
    id "com.github.edeandrea.xjc-generation" version "1.0"
    id "eclipse"
    id "idea"
    id "java"
    id "org.springframework.boot" version "${spring-boot.version}"
  }
}

rootProject.name = "spring-core"

...并且我通常将工件版本放在gradle.properties中:

#
# Dependency Versions
oracle.version = 18.3.0.0
spring-boot.version = 2.2.1.RELEASE

#
# Gradle Settings
org.gradle.configureondemand = false
org.gradle.daemon = false

#
# System Settings
systemProp.file.encoding = UTF-8
systemProp.sun.jnu.encoding = UTF-8

现在的问题是,我无法像在settings.gradle中那样从gradle.properties中读取build.gradle中的点属性(我已经尝试使用{{1 }}。

有什么方法可以实现?我可以轻松地将密钥更改为类似${property("spring-boot.version")}的方式,并且可以正常工作,但是我想知道是否有一种方法可以解决当前的问题:springBootVersion

1 个答案:

答案 0 :(得分:0)

使用<span>


带有更多变体的简单gradle项目

getProperty("spring-boot.version")

gradle.properties


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') 
    }
}

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

但是aaa.bbb.ccc成功是因为它应该成功

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

project.getProperty('aaa.bbb.ccc')之所以有效,是因为基础对象GroovyObject(IHMO)

project.getProperty('aaa.bbb.ccc')(实际上没有位于org.gradle.groovy.scripts.BasicScript中且没有真正记录的前缀...