在 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") ?: ""
}
编译没问题。 (我认为如果设置了环境变量它就会起作用)。
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
结果如下:
关于java - 如何在 build.gradle.kts 中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75069264/