我有以下代码,但configFilesPath
行中仅调用了commandLine
的最后一项。
任何想法我应该使用什么-以便它为configFilesPath
中的每个项目运行commandLine?
@TaskAction
fun create() {
project.exec({
workingDir(project.projectDir)
var configFilesPath = Paths.get(System.getProperty("user.dir"), "../../../", "myconfig/");
//Create symlinks for all files in myconfig/
Files.list(configFilesPath).forEach{
val configFile = configFilesPath.toString() + "/" + it.fileName
commandLine("ln", "-s", configFile)
}
})
}
谢谢。
最佳答案
参见ExecSpec:当您编写commandLine("ln", "-s", configFile)
时,您实际上是在调用commandLine
属性setter;如果将此调用包装在forEach
循环中,则将仅使用最后一个值(这是您观察到的)。实际上,Exec
任务只能具有一个commandLine
。
在您的情况下,您可以将project.exec( {...})
调用包装到forEach
块中,以便为每个配置文件触发一个exec
调用。
这样的事情应该起作用(代码未经测试,您可能需要稍作修改):
@TaskAction
fun create() {
var configFilesPath = Paths.get(System.getProperty("user.dir"), "../../../", "myconfig/");
// Iterate over all files in myconfig/
Files.list(configFilesPath).forEach{
val configFile = configFilesPath.toString() + "/" + it.fileName
project.exec({
workingDir(project.projectDir)
commandLine("ln", "-s", configFile)
})
}
}
注意,您还应该在
doLast { }
块中配置任务。关于gradle - Gradle-每个的命令行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56554423/