如何在 Gradle 脚本中传递默认 JVM 参数,同时允许扩展变量?

问题描述 投票:0回答:1

我的

build.gradle.kts
文件中有以下内容:

plugins {
    kotlin("jvm") version "1.9.20"
    application
}

application {
    mainClass.set("MainKt")
    applicationDefaultJvmArgs = listOf("-Dlog_dir=MY_APP_HOME/log")
}

tasks.withType<CreateStartScripts>().configureEach {
    doLast {
        windowsScript.text = windowsScript.text.replace("MY_APP_HOME", "%APP_HOME%")
        unixScript.text = unixScript.text.replace("MY_APP_HOME", "\$APP_HOME")
    }
}

我发现 unix shell 脚本将我的 JVM 参数用单引号和双引号括起来。

DEFAULT_JVM_OPTS='"-Dlog_dir=$APP_HOME/log"'

因此,变量

$APP_HOME
不会扩展,我的应用程序的日志目录实际上是“$APP_HOME/log”。

我找不到任何方法来阻止这种行为。如何才能使变量正确扩展?

kotlin gradle-kotlin-dsl
1个回答
0
投票

您可以使用1来做到这一点:

tasks.withType<CreateStartScripts>().configureEach {
    doLast {
        windowsScript.writeText(
            windowsScript.readText().replace("APP_HOME_PLACEHOLDER", "%APP_HOME%")
        unixScript.writeText(
            unixScript.readText().replace("APP_HOME_PLACEHOLDER", "'\$APP_HOME'")
        )
    }
}

我使用了 Kotlin 的

writeText
readText
函数,因为
text
上的
File
运算符仅在 Groovy 中存在,我相信。


1注意,这是由 Gradle 项目中的集成测试(用 Groovy 编写)保证的:请参阅 GitHub

测试代码在脚本中要替换的文本定义中有两个额外的反斜杠:它写为

"'\\\$APP_HOME'"
。这些额外的反斜杠之所以存在,是因为包含它的测试构建文件代码本身用三引号括起来。

© www.soinside.com 2019 - 2024. All rights reserved.