首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在settings.gradle.kts中读取Gradle属性

在settings.gradle.kts中读取Gradle属性
EN

Stack Overflow用户
提问于 2022-01-11 02:59:03
回答 3查看 1.8K关注 0票数 0

所以我使用Gradle Kotlin DSL,我想知道是否有可能在settings.gradle.kts中读取gradle属性

我有这样的gradle.properties文件:

代码语言:javascript
运行
复制
nexus_username=something
nexus_password=somepassword

我已经这样做了,但还是看不懂这些属性。

代码语言:javascript
运行
复制
dependencyResolutionManagement {
    repositories {
        mavenCentral()
        google()
        maven { setUrl("https://developer.huawei.com/repo/") }
        maven { setUrl("https://jitpack.io") }
        maven {
            setUrl("https://some.repository/")
            credentials {
                val properties =
                    File(System.getProperty("user.home")+"\\.gradle", "gradle.properties").inputStream().use {
                        java.util.Properties().apply { load(it) }
                    }
                username = properties["nexus_username"].toString()
                password = properties["nexus_password"].toString()
            }
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-01 16:54:25

您可以使用gradle.properties (仅限Kotlin,因为委托属性是Kotlin特性!)访问在build.gradle.ktssettings.gradle.kts中设置的值。

gradle.properties

代码语言:javascript
运行
复制
kotlin.code.style=official
# Your values here
testValue=coolStuff

build.gradle.kts

代码语言:javascript
运行
复制
val testValue: String by project

settings.gradle.kts

代码语言:javascript
运行
复制
val testValue: String by settings
票数 1
EN

Stack Overflow用户

发布于 2022-10-24 08:50:18

可以使用提供者访问分级参数

代码语言:javascript
运行
复制
val usernameProvider = providers.gradleProperty("nexus_username")
val passwordProvider = providers.gradleProperty("nexus_password")

dependencyResolutionManagement {
    repositories {
        maven {
            setUrl("https://some.repository/")
            credentials {
                username = usernameProvider.getOrNull()
                password = passwordProvider.getOrNull()
            }
        }
    }
}

要使用Groovy,需要将变量声明替换为:

代码语言:javascript
运行
复制
def usernameProvider = providers.gradleProperty("nexus_username")
def passwordProvider = providers.gradleProperty("nexus_password")

基于回答

票数 1
EN

Stack Overflow用户

发布于 2022-03-14 04:39:59

谷歌一段时间后,寻找答案。为了防止这些变量被推入存储库,最好使用环境变量而不是gradle.properties

仅仅因为在settings.gradle.kts文件中没有调用属性的函数。而仅仅是强制读取公共gradle.properties文件就是这样的一种威胁。

设置环境变量后,可以在settings.gradle.kts中调用该变量,如下所示:

代码语言:javascript
运行
复制
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven { setUrl("https://jitpack.io") }
        maven {
            setUrl(System.getenv("nexus_url"))
            credentials {
                username = System.getenv("nexus_username")
                password = System.getenv("nexus_password")
            }
        }
    }
}

变量不会被推送到存储库中,通过这种方式也可以帮助您在CI/CD (如github操作)中将变量设置为机密。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70661139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档