我想从Kotlin代码调用外部命令.在C/Perl中,我会使用system()函数; 在Python中,我会使用子进程模块; 在Go中,我会使用os/exec; 等等.但是,我怎么在Kotlin这样做呢?
我有一个gradle构建设置,在其开头我想在一个准备我的环境的子目录中执行一个shellcript.
task build << {
}
task preBuild << {
println 'do prebuild stuff:'
}
task myPrebuildTask(type: Exec) {
workingDir "$projectDir/mySubDir"
commandLine './myScript.sh'
}
build.dependsOn preBuild
preBuild.dependsOn myPrebuildTask
Run Code Online (Sandbox Code Playgroud)
但是,当我通过调用gradle myPrebuildTask或简单地构建项目来执行任务时,会发生以下错误:
> A problem occurred starting process 'command './myScript.sh''
Run Code Online (Sandbox Code Playgroud)
不幸的是,这就是我得到的.
我也试过以下 - 同样的错误.
commandLine 'sh mySubDir/myScript.sh'
Run Code Online (Sandbox Code Playgroud)
我在Windows上使用Gradle 1.10(Android需要),在Cygwin shell中.有任何想法吗?
我正在尝试将 Android 应用程序的 build.gradle 文件转换为 Kotlin DSL。这个文件有一个这样的功能:
def getLastCommitHash() {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = stdout
}
return stdout.toString().trim()
}
Run Code Online (Sandbox Code Playgroud)
我将其转换为:
fun getLastCommitHash() {
val stdout = ByteArrayOutputStream()
exec {
commandLine("git", "rev-parse", "--short", "HEAD")
standardOutput = stdout
}
return stdout.toString().trim()
}
Run Code Online (Sandbox Code Playgroud)
我收到Unresolved reference: ByteArrayOutputStream错误并应用导入,将其更改为java.io.ByteArrayOutputStream()显示Unresolved reference: io错误。
我做错了什么吗?提前致谢。
在阅读了有关该主题和 Gradle 手册的多篇文章后,我正在尝试运行下面的代码块。我运行下面并得到以下错误:execCommand == null!
关于我在下面的代码块中做错了什么的任何想法?
open class BuildDataClassFromAvro : org.gradle.api.tasks.Exec() {
@TaskAction
fun build() {
println("Building data classes.....")
commandLine("date")
}
}
tasks.register<BuildDataClassFromAvro>("buildFromAvro"){
description = "Do stuff"
}
Run Code Online (Sandbox Code Playgroud)