如何从gradle中的文件执行带有多个参数的命令?

时间:2016-08-23 07:15:25

标签: unix gradle

我在.txt-file

中有以下命令
java -jar /path/to/something.jar --classpath="/path/to/something/other.jar" --url="something:@127.0.0.1:1234:TEST12" --driver=some.driver update

可以看到使用不同语法的多个参数(---和/或有和没有"")。

我尝试了以下代码:

task test(type: Exec) {
  workingDir '/path/to/working/dir'
  String commandFromFile = new File('/path/to/file/with/command' + 'filewithcommand.txt').getText('UTF-8')
  commandLine commandFromFile
}

在Windows平台上,此代码正在运行,但在unix上却没有。

1 个答案:

答案 0 :(得分:1)

正如您在the documentation of the Exec task中所看到的,您应该将命令分成几部分。因此,如果您的参数中没有空格,那么commandLine commandFromFile.split(' ')应该可以正常工作。如果有,则需要更复杂的方法来分割考虑引号的命令。

或者您更改命令文件的格式,使其每行有一个参数,并使用.readLines('UTF-8')而不是.getText('UTF-8')

我对以下内容并不是100%肯定,但是你可能必须删除引用参数,即使它们包含空格,因为你将参数作为单个实体提供给{{1}调用因此在这里不需要引用转义空格。根据您调用的操作系统和工具,如果有无法处理的引号,它甚至可能会破坏命令。

或者,但这是更糟糕的方法imho,你也可以做类似的事情

commandLine

然后命令处理器进行拆分等等。那里你需要引号和东西。当然,需要确定本例中的windows变量,例如: G。来自系统属性。