简体   繁体   English

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

[英]Converting some code snippet from groovy to kotlin KTS in my build.gradle.kts file

I have the following code in my build.gradle.kts.我的 build.gradle.kts 中有以下代码。 I have now migrated to kotlin KTS.我现在已经迁移到 kotlin KTS。 And need help on translating this code from groovy to kotlin script.并且需要帮助将此代码从 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
    }
}

I am getting errors我收到错误

Unexpected tokens (use ';' to separate expressions on the same line) Unsupported [literal prefixes and suffixes] Unresolved reference: v Expecting an element Unexpected tokens (use ';' to separate expressions on the same line) Unsupported [literal prefixes and suffixes] Unresolved reference: v Expecting an element

Many thanks in advance提前谢谢了

UPDATE:更新:

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
    }
}

The latest error is Unresolved reference: execute最新的错误是Unresolved reference: execute

Looks like you didn't properly escape the quotes in the strings.看起来您没有正确转义字符串中的引号。

"git describe --tags --abbrev=0 --match "v*.*.*""

should be应该

"git describe --tags --abbrev=0 --match \"v*.*.*\""

Try this, however it might not split out as it is currently with groovy, as you would have to create the function runCommand to split the string:试试这个,但是它可能不会像当前使用 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? {
    ...
}

This should do the trick:这应该可以解决问题:

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"))
}

Tested on MacOS and Windows.在 MacOS 和 Windows 上测试。

By using import org.codehaus.groovy.runtime.ProcessGroovyMethods通过使用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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Gradle Kotlin:如何将 build.gradle 脚本的一部分从 groovy 转换为 build.gradle.kts 语法? - Gradle Kotlin : How to convert part of build.gradle script from groovy to build.gradle.kts syntaxe? 将现有的 groovy build.gradle 文件转换为基于 kotlin 的 build.gradle.kts - Convert an existing groovy build.gradle file into a kotlin based build.gradle.kts 将 Groovy 任务 build.gradle 转换为 kotlin kts 文件 - Converting Groovy tasks build.gradle to kotlin kts file androidTest Groovy 模拟 build.gradle.kts - androidTest Groovy analog in build.gradle.kts 从 build.gradle 迁移到 build.gradle.kts 时出现一些代码片段问题 - Migrating from build.gradle to build.gradle.kts having issue with some code snippets Intellij 在读取我的 build.gradle.kts 文件时出错 - Intellij is erroring when reading my build.gradle.kts file Visual Studio Code + Java - 在 build.gradle.kts 中找不到我的依赖项 - Visual Studio Code + Java - doesn't find my dependencies from build.gradle.kts 如何定义 settings.gradle.kts 和 build.gradle.kts 中可用的 kotlin dsl gradle 属性? - How to define kotlin dsl gradle properties available in settings.gradle.kts and build.gradle.kts? Jaxb 用于 build.gradle.kts。 如何将它从 groovy 翻译成 kotlin? - Jaxb for build.gradle.kts. How to translate it from groovy to kotlin? 为什么 Intellij 不为新的 kotlin 项目创建 build.gradle.kts? - Why is Intellij not creating a build.gradle.kts for a new kotlin project?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM