我想要做的是從groovy腳本調用maven。有問題的groovy腳本被用作Maven包裝來構建J2EE項目,方法是下載標籤並調用下載的Maven。我應該如何完成調用maven來構建/打包EAR(groovy腳本已經能夠從SCM下載標籤)。如何在Java/Groovy中進行系統命令調用?
回答
在Groovy中調用外部進程的最簡單方法是對字符串使用execute()命令。例如,從Groovy腳本執行的Maven運行:如果你想捕捉的命令的輸出
"cmd /c mvn".execute()
,也許把它打印出來,你可以這樣做:
print "cmd /c mvn".execute().text
的「 cmd/c'在開始時調用Windows命令shell。由於mvn.bat是一個批處理腳本,你需要這個。對於Unix,你可以調用系統shell。
您可以使用Runtime類來啓動shell命令。看看這裏:http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String) 您可能以後捕獲流程執行的結果(以查明它是否失敗)。
對於Java 7+標準輸入輸出重定向:
new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
如果你傳入一個args的'List',確保這些元素都是'String's而不是[GString](http://docs.groovy-lang.org/docs/latest/html/api/groovy/ lang/GString.html)與插值變量。另外,不要忘記'redirectError'。 – seanf 2017-11-23 01:35:12
如果你想在標準輸出上執行的命令,你可以做
獲取打印輸出是因爲這樣做"yourCommand".execute();
一樣簡單
def proc = "yourCommand".execute();
proc.waitForProcessOutput(System.out, System.err);
如果你想存儲和處理輸出,你可以做
def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream .toString());
當我這樣做def homeDir =「c:/ test/server」; def workDir =「$ {homeDir}/workDir」; def tempDir =「$ {workDir}/tmp」; println(homeDir); println(workDir); runShell(「cd c:」); // runShell(「mkdir -p $ {tempDir}」); void runShell(String s){ def execute = s.execute(); execute.waitForProcessOutput(System.out,System.err); def value = execute.exitValue(); if(val> 0){ throw new Exception(「Exit value:$ {value}」); } } 我收到如下錯誤:java.io.IOException:無法運行程序「cd」:CreateProcess error = 2,系統找不到指定的文件 – user641887 2016-11-01 23:27:11
- 1. 系統調用和命令
- 2. 進行系統調用(Windows命令提示符)英語回答
- 3. 使用exec在新進程中執行系統命令
- 4. 在exec系統調用中運行別名命令
- 5. 在dart中進行系統調用?
- 6. 在Python中進行系統調用
- 7. 在python中執行系統命令
- 8. 在postgresql中執行系統命令
- 9. 如何在java中進行系統暫停進行調試?
- 10. 如何使用Cygwin在perl腳本中運行系統命令
- 11. 如何在C++中並行執行系統命令
- 12. 系統調用不起作用,如命令行
- 13. perl系統命令執行
- 14. 從C++調用底層系統命令
- 15. Strace命令只顯示系統調用
- 16. Python - 無法調用系統命令
- 17. Powershell調用命令和系統變量
- 18. 軌如何從軌道運行系統命令命令安全
- 19. 如何在Chrome中使用命令行進行調試
- 20. 如何讓 '系統' 命令,在mysql的
- 21. read_char系統調用不是在命令行SPIM工作正常
- 22. 如何獲得與系統運行進程的PID()在C++中命令
- 23. 如何在vb6中調用命令行
- 24. php5在後臺進行系統調用
- 25. 如何在java腳本中執行系統命令?
- 26. 如何在fedora系統的命令行中提取bz2文件?
- 27. 如何在JavaScript中運行系統命令?
- 28. 如何在keymando中執行系統命令
- 29. 如何在Qt中運行系統命令?
- 30. 如何在HDFS中的文件上運行系統命令?
酷!不知道你能做到這一點。 – armandino 2010-04-27 05:46:02
這對我來說是第一次。去掉了一段時間的流程「consumeProcessOutput()」路線,但沒有骰子。 這將有助於確定Docker構建失敗的原因。 – eversMcc 2017-03-01 11:58:21