在settings.gradle.kts中阅读Gradle属性

btqmn9zl  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(371)

我使用的是GradleKotlinDSL,我想知道是否可以读取settings.gradle.kts中的gradle属性?
我有这样的gradle.properties文件:

nexus_username=something
nexus_password=somepassword

我已经这样做了,但仍然无法读取属性。

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()
            }
        }
    }
}
fquxozlt

fquxozlt1#

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

kotlin.code.style=official
# Your values here
testValue=coolStuff

build.gradle.kts

val testValue: String by project

settings.gradle.kts

val testValue: String by settings
ars1skjm

ars1skjm2#

您可以使用提供程序访问gradle参数

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上工作,您需要将变量声明替换为:

def usernameProvider = providers.gradleProperty("nexus_username")
def passwordProvider = providers.gradleProperty("nexus_password")

基于answer

piah890a

piah890a3#

在谷歌搜索了一段时间后,寻找答案。为了防止这些变量被推到仓库中,最好使用环境变量而不是gradle.properties
因为settings.gradle.kts文件中没有调用属性的函数,而强制阅读公共的gradle.properties文件是一件很麻烦的事情。
设置环境变量后,可以在settings.gradle.kts中调用该变量,如下所示:

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一样操作,在那里你可以把变量设置为secret。

相关问题