我有一个Gradle 6.0.1项目。(摘录build.gradle)看起来像:
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\nRun Code Online (Sandbox Code Playgroud)\n\n我正在管理以下位置的所有插件版本settings.gradle:
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"\nRun Code Online (Sandbox Code Playgroud)\n\n...我通常将工件版本放在gradle.properties:
#\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\nRun Code Online (Sandbox Code Playgroud)\n\n现在的问题是我无法以与我已经尝试使用的 \xe2\x80\x94内部相同的方式读取settings.gradle(来自)中的点属性。gradle.propertiesbuild.gradle${property("spring-boot.version")}
有什么办法可以实现这一点吗?我可以轻松地将密钥更改为类似的东西springBootVersion并且它可以工作,但我想知道是否有一种方法可以以我目前的方式拥有它:spring-boot.version。
使用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中,并且没有真正记录...
对我来说,@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)
| 归档时间: |
|
| 查看次数: |
5115 次 |
| 最近记录: |