在我的build.gradle.kts文件中将一些代码片段从groovy转换为kotlin KTS

vjhs03f7  于 2022-11-01  发布在  Kotlin
关注(0)|答案(4)|浏览(225)

我在我的build.gradle.kts中有以下代码。我现在已经迁移到了kotlin KTS。需要帮助将这些代码从groovy翻译成kotlin脚本。

fun getVersionFromGit(fallback: String): String {
    return try {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            "git describe --tags --abbrev=0 --match "v*.*.*"".execute().text.substring(1).trim()
        } else {
            ["sh , "-c"", "git describe --tags --abbrev=0 --match "v*.*.*""].execute().text.substring(1).trim()
        }
    } catch (e: Throwable) {
        println("Skipping git version")
        fallback
    }
}

我收到错误
一个月一个月一个月一个月一个月
先谢谢你
最新消息:

fun getVersionFromGit(fallback: String): String {
    return try {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            "git describe --tags --abbrev=0 --match \"v*.*.*\"".execute().text.substring(1).trim()
        } else {
            listOf("sh , \"-c\"", "git describe --tags --abbrev=0 --match \"v*.*.*\"").execute().text.substring(1).trim()
        }
    } catch (e: Throwable) {
        println("Skipping git version")
        fallback
    }
}

最新的错误是Unresolved reference: execute

gv8xihay

gv8xihay1#

看起来您没有正确转义字符串中的引号。
"git describe --tags --abbrev=0 --match \"v*.*.*\""
应该是
"git describe --tags --abbrev=0 --match \"v*.*.*\""

uinbv5nw

uinbv5nw2#

这样就可以了:

import java.io.ByteArrayOutputStream

fun getVersionFromGit(fallback: String) =
    try {
        ByteArrayOutputStream().use { out ->
            exec {
                commandLine = listOf("git", "describe", "--tags", "--abbrev=0", "--match", "v*.*.*")
                standardOutput = out
            }.assertNormalExitValue()
            out.toString().substring(1).trim()
        }
    } catch (e: Throwable) {
        println("Skipping git version")
        fallback
    }

task("demo") {
    println(getVersionFromGit("oops"))
}

已在MacOS和Windows上测试。

piah890a

piah890a3#

尝试这样做,但是它可能不会像目前在groovy中那样拆分出来,因为您必须创建函数runCommand来拆分字符串:

fun getVersionFromGit(fallback: String): String {
    return try {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            "git describe --tags --abbrev=0 --match \"v*.*.*\"".runCommand().trim()
        } else {
            listOf("sh , \"-c\"", "git describe --tags --abbrev=0 --match \"v*.*.*\"").runCommand().trim()
        }
    } catch (e: Throwable) {
        println("Skipping git version")
        fallback
    }
}

fun String.runCommand(workingDir: File): String? {
    ...
}
gj3fmq9x

gj3fmq9x4#

通过使用import org.codehaus.groovy.runtime.ProcessGroovyMethods

fun getVersionFromGit(fallback: String): String {
    return try {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            ProcessGroovyMethods.getText(ProcessGroovyMethods
                .execute("git describe --tags --abbrev=0 --match \"v*.*.*\"")).substring(1).trim()
        } else {
            ProcessGroovyMethods.getText(ProcessGroovyMethods
                .execute(listOf("sh , \"-c\"", "git describe --tags --abbrev=0 --match \"v*.*.*\""))).substring(1).trim()
        }
    } catch (e: Throwable) {
        println("Skipping git version")
        fallback
    }
}

相关问题