git.exe 未被 gradle 找到

git.exe is not found by gradle

我的 Android Studio 项目使用来自 gradle 的 git :

branchName = ByteArrayOutputStream().use { outputStream ->
                    exec {
                        commandLine("git branch --show-current")
                        standardOutput = outputStream
                    }
                    outputStream.toString()
                }

在 Linux 和 Mac 上,这工作得很好,但在 Windows 上它说:

Could not start 'git'

我必须用这个替换它:

commandLine("cmd", "/c", "git branch --show-current")

这违背了我的目的,因为我希望它能在不同的平台和机器上工作。如果我添加它,它会在 Linux 和 Mac 处中断。 对我应该做什么有什么建议吗?

你或许可以OS这样检查

import org.apache.tools.ant.taskdefs.condition.Os

// ...

branchName = ByteArrayOutputStream().use { outputStream ->
                    exec {
                        if (Os.isFamily(Os.FAMILY_WINDOWS)) commandLine("cmd", "/c", "git branch --show-current")
                        else commandLine("git branch --show-current")
                        standardOutput = outputStream
                    }
                    outputStream.toString()
                }

如果你真的只想用linux的方式实现,你可以试试WSL—— Windows Subsytem for Linux. Here is an additional instruction for 运行 Android Studio with this.

它可以工作,但需要一些配置,但通常它对你的情况来说有点矫枉过正,我认为 @deecue 是正确的 sugesting small if - 查看文档:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html

你可以用更愉快和可重用的方式来做——作为一个提取的方法:

import org.apache.tools.ant.taskdefs.condition.Os

// ...

fun runCommand(command: String, windowsDir: String = "/c") {
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        commandLine("cmd", windowsDir, command)
    } else {
        commandLine(command)
    }
}

// ...

branchName = ByteArrayOutputStream().use { outputStream ->
    exec {
        runCommand("git branch --show-current")
        standardOutput = outputStream
    }
    outputStream.toString()
}