我想检查是否设置了两个项目属性,如果没有,将它们设置为空值以避免构建失败。这些属性应该来自 ~/.gradle/gradle.properties
(如果已配置)。
目标是拥有在该本地文件中定义的 S3 中 Maven 存储库的凭据。每个用户都必须将自己的数据放在那里,但我希望构建仅输出警告并在未设置时继续。即使不联系 S3,它仍然会成功的可能性很高。
我已经使用 Groovy DSL 运行它,但我现在正在切换到 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=""行,我总是收到错误消息:Cannot get property 's3AccessKeyId' on extra properties extension as it does not exist
如果在本地 Maven 存储库中找到所有工件,我希望构建能够工作,即使没有
gradle.properties
。只有当某些工件丢失时,构建才会中止并出现一些“凭据错误”错误。正如我所说,它已经与 Groovy 一起工作了。
最佳答案
为此,您需要使用与额外属性不同的属性属性,例如:
project.properties["s3SecretKey"].toString()
然后你需要在你的 gradle.properties
中有:s3AccessKeyId=ABCDEFGHIJKLMNOPQRST
如果值不存在,它可能会返回 null
所以你可以这样做:(project.properties["s3SecretKey"] ?: "default value").toString()
它应该工作
关于gradle - 如何使用 Kotlin DSL 定义 Gradle 项目属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820891/