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

标签 gradle kotlin gradle-kotlin-dsl

我想检查是否设置了两个项目属性,如果没有,将它们设置为空值以避免构建失败。这些属性应该来自 ~/.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/

相关文章:

build.gradle.kts 中的 androidTest Groovy 模拟

android - gradle experimental 通过 srcDir srcFile 指令包含文件目录

android - 尝试将eclipse ADT项目导入android studio但gradle失败

android - 无法解析配置 ':app debug Runtime Classpath' 的所有依赖项

eclipse - 在 Eclipse EJB Gradle 项目中将 persistence.xml 放在哪里?

java - Guice:在 Binder 内独立使用相同的实例

field - Java 兼容性的公共(public)字段

android - 使用协程进行多次循环调用

android - 如何使用 Kotlin DSL 将选项传递给 JavaPluginExtension

gradle - 如何使用Gradle Kotlin DSL为FatJar指定入口点Main-Class?