如何使用Kotlin DSL定义Gradle项目属性



我想检查是否设置了两个项目属性,如果没有,请将它们设置为空值,以避免构建失败。这些属性应该来自~/.gradle/gradle.properties(如果已配置(。

目标是在本地文件中定义S3中Maven存储库的凭据。每个用户都必须将自己的数据放在那里,但我希望构建只输出一个警告,如果没有设置这些警告,则继续。即使没有联系S3,它仍然很有可能成功。

我已经用GroovySSL运行了它,但我现在正在切换到Kotlin,我就是无法正确理解语法。

这就是~/.gradle/gradle.properties的样子:

s3AccessKeyId=ABCDEFGHIJKLMNOPQRST
s3SecretKey=abcdefghijklmnopqrstuvwxyz1234567890abcd

以下是build.gradle.kts的相关部分

if (!project.hasProperty("s3AccessKeyId") || !project.hasProperty("s3SecretKey")) {
logger.lifecycle("WARNING: s3AccessKeyId and s3SecretKey not set!")
project.extra["s3AccessKeyId"] = ""
project.extra["s3SecretKey"] = ""
}
repositories {
mavenLocal()
maven {
url = uri("s3://maven-repo.mycompany.com.s3.eu-central-1.amazonaws.com/")
credentials(AwsCredentials::class) {
accessKey = project.extra["s3AccessKeyId"].toString()
secretKey = project.extra["s3SecretKey"].toString()
}
}
}

无论我如何编写s3AccessKeyId=">行,我总是得到错误:

无法在额外属性扩展上获取属性"s3AccessKeyId",因为它不存在

如果所有工件都在本地Maven存储库中找到,我希望构建能够工作,即使没有gradle.properties。只有在某个工件丢失的情况下,构建才应该中止,并带有一些"错误";凭证错误";错误

正如我所说,它已经与Groovy一起工作了。

为此,您需要使用属性属性,这与额外的不同,如:

project.properties["s3SecretKey"].toString()

然后你需要在你的gradle.properties:

s3AccessKeyId=ABCDEFGHIJKLMNOPQRST

如果值不存在,它可能会返回null,因此您可以执行以下操作:

(project.properties["s3SecretKey"] ?: "default value").toString()

而且它应该工作

最新更新