java - 如何在 build.gradle.kts 中设置变量

标签 java kotlin build.gradle

在 build.gradle 中我知道你可以做到这一点

ext {
    dbUsername = System.getenv("DB_USER").toString()
    dbPassword = System.getenv("DB_PASS").toString()
    libsUserNameNew = System.getenv("LIBS_USERNAME_NEW").toString()
    libsPassNew = System.getenv("LIBS_PASS_NEW").toString()
    gitShortTag = System.getenv("SHORT_SHA").toString()
    repoName = System.getenv("REPO_NAME").toString()
    group = "app.test.customerservicepoc"
    mainClass = "app.test.customerservicepoc.CustomerServicePOC"
}

如何使用 build.gradle.kts 实现相同的目标 这是我尝试过的

var dbUsername =""
var dbPassword =""
var LibsUserNameNew = ""
var LibsPassNew = ""
var gitShortTag  = ""
var repoName = ""

然后

ext {
    dbUsername = System.getenv("DB_USER").toString()
    dbPassword = System.getenv("DB_PASS").toString()
    kyoskLibsUserNameNew = System.getenv("LIBS_USERNAME_NEW").toString()
    LibsPassNew = System.getenv("LIBS_PASS_NEW").toString()
    gitShortTag = System.getenv("SHORT_SHA").toString()
    repoName = System.getenv("REPO_NAME").toString()
    group = "app.test.mms"
}

在构建过程中我最终遇到了错误

  • What went wrong: 945 Cannot invoke "String.toString()" because the return value of "org.gradle.internal.classpath.Instrumented.getenv(String, String)" is null

我正在将项目迁移到 kotlin gradle,如何在 kotlin gradle 中定义变量?

最佳答案

嗯,问题显示在the other question中, System.getenv 是一个静态 java 方法,不保证返回的 String 为空。在 Kotlin 中,这是一个编译错误。因此,编译器告诉您的是“我不能保证对返回的字符串调用 toString() 不会因 NullPointerException 崩溃,因为 JVM 方法 getenv 不会崩溃。保证”。我认为您根本不需要 toString() 调用。

lateinit var db: String
// or
var db: String? = null //this can now be null


//then
ext {
    db = System.getenv("YOUR_DB") ?: "" //UPDATE: you also need this since getenv can return null, or you need to make the variable `String?`
//or
    db = System.getenv("YOUR_DB") ?: "" // since it can be null, set some fallback, like empty or null
}

这应该没问题。

更新

我使用 compose 创建了一个新的空 Android 项目(使用 build.gradle.kt 而不是 groovy),并添加了以下内容:

lateinit var something1: String
var something2: String? = null

ext {
    something1 = System.getenv("something") ?: ""
    something2 = System.getenv("something2") ?: ""
}

Image of Android Studio editor with a short code snippet

编译没问题。 (我认为如果设置了环境变量它就会起作用)。

25 秒内取得成功

更新 2 真实测试

我确实做到了

lateinit var something1: String
var something2: String? = null

ext {
    something1 = System.getenv("SHELL") ?: ""
    something2 = System.getenv("SHELL") ?: ""
}

tasks.register("printSomething") {
    println("Something 1 is $something1")
    println("Something 2 is $something2")
}

然后我运行了./gradle printSomething

结果如下:

Image of terminal emulator where gradlew printsomething was executed and the output is as expected according the code snipet above this image.

关于java - 如何在 build.gradle.kts 中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75069264/

相关文章:

android - 多卡 1.4.20 "Nothing to document"

巨大 CSV 文件的 Java 内存问题

java - 空指针异常 - 将项目添加到 ArrayList

kotlin - 从具有行的键值属性的枚举中提取Map <String,Object>?

android - 为什么在尝试访问常量值时存在 Unresolved 引用?

android - Android 3.1.1-无法解决以下问题:Lcom/google/android/gms/common/internal/zzbq;

java - 即使未使用步骤定义类,钩子(Hook)执行后的 cucumber 步骤定义类也会执行吗?

java - Apache HttpClient 抛出 NoClassDefFoundError

android - 使用 View 模型和改造的用户登录

android - 从 Linux 终端编译为 apk