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

时间:2019-11-12 14:40:04

标签: 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 =“” 行,我总是会收到错误消息:

  

由于不存在额外的属性扩展,因此无法获得属性“ s3AccessKeyId”

如果在本地Maven存储库中找到了所有工件,那么即使没有gradle.properties,我也希望该构建能够正常工作。仅当缺少某些工件时,该构建才应中止并出现一些“凭据错误”错误。

正如我所说,它已经可以与Groovy一起使用了。

1 个答案:

答案 0 :(得分:0)

为此,您需要使用与 extra 不同的 properties 属性,例如:

package demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

然后你需要在你的 project.properties["s3SecretKey"].toString() :

gradle.properties

如果该值不存在,它可能会返回 s3AccessKeyId=ABCDEFGHIJKLMNOPQRST ,因此您可以这样做:

null

它应该可以工作