当前位置: 首页 > 知识库问答 >
问题:

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

韩鸿
2023-03-14

我有以下代码在我的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
    }
}

我有错误

意外标记(使用';'分隔同一行上的表达式)不支持的[文字前缀和后缀]未解析的引用:v期待一个元素

非常感谢

更新:

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

最新错误是“未解决的引用:执行”

共有3个答案

闾丘德宇
2023-03-14

尝试这样做,但是它可能不会像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? {
    ...
}
杨波娃
2023-03-14

这应该可以做到:

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上测试。

濮景龙
2023-03-14

看起来你没有正确地转义字符串中的引号。

"git描述--tags--abbrev=0--匹配"v*. *.*""

应该是

< code > " git describe-tags-abbrev = 0-match \ " v *。*.*\""

 类似资料:
  • 我试图将Groovy中的build.gradle文件转换成kotlin。kts文件,我在gradle文件中有一些我不知道如何正确转换的任务 我不太明白如何使用“类型”,我正在沿着这条路走下去 但它给了我一个错误 类型'DomainObjectCollection 如何正确地将这些Groovy任务转换为kotlin任务?

  • 我有一个我正在迁移到。我唯一无法更改的两个代码段如下。 只是想知道以下内容应该在中 非常感谢任何建议,

  • 我的项目有两个不同的 build.gradle 文件,用时髦的语法编写。我想把这个时髦的 gradle 文件改成一个用 Kotlin Syntax (build.gradle.kts) 编写的 gradle 文件。 我将向您展示根项目build.gradle文件。 我试了几个在网上找的“办法”,都没用。重命名文件显然不是解决问题的办法,也没有帮助。我已经在我的根项目中创建了一个新的build.gr

  • 我有以下java代码: 我想将其转换为smali code 我怎么能这样做?(我尝试了java2smali插件,但失败了)

  • 我是新来的反应。所以请原谅我的天真。我有以下一段反应代码: 我需要在类中转换上面的代码并将其导出:我编写了下面的代码 但是,因为这是一个容器类,所以我不希望在我的this组件类中使用“document..getElementById(“容器”)。我的index.js已经有了 请帮帮我。

  • 问题内容: 这里有新用户。我有一部分这样的结构对象: 哪个切片像: 我想知道如何将结果切片转换为类似字符串的切片: 我试图像这样迭代: } 但是我得到: 因此,感谢您的帮助。 问题答案: 对于您的特定情况,我将“手动”执行: 输出: 如果希望它动态遍历所有字段,则可以使用该程序包。一个辅助函数可以做到这一点: 使用它: 输出是相同的: 在Go Playground上尝试示例。