【问题标题】:Access dot property stored in gradle.properties within settings.gradle在 settings.gradle 中访问存储在 gradle.properties 中的点属性
【发布时间】:2020-03-18 20:53:21
【问题描述】:

我有一个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

现在的问题是我无法像在build.gradle 中那样读取settings.gradle(来自gradle.properties)中的点属性——我已经尝试过使用${property("spring-boot.version")}

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

【问题讨论】:

  • getProperty("spring-boot.version")
  • 呃!那行得通:/

标签: gradle groovy


【解决方案1】:

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

gradle.properties

aaa.bbb.ccc=12345

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

但是project.property('aaa.bbb.ccc') 成功了,因为它应该

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

project.getProperty('aaa.bbb.ccc') 工作是因为 groovy 基本对象 GroovyObject (IHMO)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 2023-04-03
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多