2014-02-27 55 views
2

我最近被指示在Gradle中實現所有構建/發佈工程作業。如何爲Gradle文件集合中的每個文件執行shell命令?

所以我是新來的Gradle,一些在shell提示符下顯而易見的東西在這個勇敢的新世界中很難理解。

我的版本創建了一組jar文件。

我需要執行一個shell任務他們中的每一個類似於

東西:

task findBugs (type:Exec, dependsOn: fb23) {commandLine 'java', '-jar', 
'./findBugs/findbugs.jar', '-textui', '-progress', '-xml', '-output', 
'TrustManagerService.xml', 'TrustManagerService.jar'} 

(我不能usethe FindBugs的插件,因爲我們是在JDK8 - 所以我「M從預覽版本上運行的FindBugs外部...)

我可以得到一個文件的收集和遍歷文件名的東西,如:

FileTree iotTree = fileTree(dir: '.') 
iotTree.include '*.jar' 
iotTree.each { 
File file -> println file.name 
println 'A file' 
} 

def iotJars = files(file('./jars').listFiles()) 
println '' 
println iotJars 
iotJars.each { File file -> println 'The next file is: ' + file.name } 

但對我的生活,我不能看到如何爲返回的每個文件名執行shell命令的最直接的方式做到這一點

的思考?

順便說一句 - 什麼是包含在代碼清單換行符的最佳方式 - 我不得不返回並添加CR的每一行,讓他們打破... :(

+0

參見:http://www.gradle.org/docs/current/userguide/working_with_files.html –

回答

8

可以使用上的Stringexecute方法來執行一個外殼命令

下面是一個例子任務:

task executeExample << { 
    FileTree ioTree = fileTree(dir: ".") 
    ioTree.each { f -> 
    def proc = "ls -l ${f}".execute(); 
    proc.waitFor(); 
    println "return code: ${ proc.exitValue()}" 
    println "stderr: ${proc.err.text}" 
    println "stdout: ${proc.in.text}" 
    } 
} 
+0

我'愛能夠使用這種結構 - 但更多的補充x比ls等我得到各種解析錯誤。 –

+0

例如:def cmdLine ='java -jar ./findBugs/findbugs.jar -textui -progress -xml -output FBJars /'+ baseName +'.xml FBJars /'+ baseName +'.jar'.execute() - 當我嘗試執行它時,帶或不帶雙引號引發錯誤... –

+0

嘗試先將命令分配給字符串變量,然後執行println變量。看看它看起來如何。如果可以,請嘗試在變量上使用execute。 – ditkin

相關問題