2010-04-23 32 views
20

Điều tôi muốn làm là gọi maven từ một tập lệnh hấp dẫn. Kịch bản lệnh groovy được đề cập được sử dụng như một trình bao bọc maven để xây dựng các dự án J2EE bằng cách tải xuống một thẻ và gọi maven về những gì đã được tải xuống. Làm thế nào tôi nên thực hiện gọi maven để xây dựng/gói EAR (kịch bản groovy đã có khả năng tải xuống thẻ từ SCM).Làm thế nào để thực hiện lệnh gọi hệ thống trong Java/Groovy?

Trả lời

31

Cách đơn giản nhất để gọi quy trình bên ngoài trong Groovy là sử dụng lệnh execute() trên một chuỗi. Ví dụ, để thực hiện maven từ một kịch bản hấp dẫn chạy này:

"cmd /c mvn".execute() 

Nếu bạn muốn bắt đầu ra của lệnh và có thể in ra, bạn có thể làm điều này:

print "cmd /c mvn".execute().text 

Các ' cmd/c 'lúc bắt đầu gọi shell của Windows. Vì mvn.bat là một tập lệnh batch bạn cần. Đối với Unix bạn có thể gọi trình bao hệ thống.

+0

Tuyệt! Không biết bạn có thể làm điều đó. – armandino

+0

Lần đầu tiên tôi làm việc này. Đã đi xuống quá trình "consumProcessOutput()" lộ trình một lúc nhưng không có xúc xắc với điều đó. Điều này sẽ giúp ích rất nhiều với việc xác định lý do tạo Docker không thành công. – eversMcc

4

Đối với Java 7+ stdio chuyển hướng:

new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor(); 
+0

Nếu bạn chuyển vào một 'Danh sách' của arg, hãy đảm bảo rằng các phần tử là tất cả' Chuỗi 'và không phải [GString] (http://docs.groovy-lang.org/docs/latest/html/api/groovy/ lang/GString.html) s với các biến nội suy. Cũng đừng quên 'redirectError'. – seanf

18

Nó cũng đơn giản như làm

"yourCommand".execute(); 

Nếu bạn muốn để có được kết quả đầu ra in trên lệnh thực thi trên đầu ra tiêu chuẩn bạn có thể làm

def proc = "yourCommand".execute(); 
proc.waitForProcessOutput(System.out, System.err); 

Nếu bạn muốn lưu trữ và xử lý đầu ra, bạn có thể làm

def proc = "yourCommand".execute(); 
def outputStream = new StringBuffer(); 
proc.waitForProcessOutput(outputStream, System.err); 
println(outputStream .toString()); 
+1

khi tôi làm điều này 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 (Chuỗi s) { def execute = s.execute(); execute.waitForProcessOutput (System.out, System.err); def value = execute.exitValue(); nếu (val> 0) { ném ngoại lệ mới ("Giá trị thoát: $ {value}"); } } Tôi gặp lỗi dưới đây java.io.IOException: Không thể chạy chương trình "cd": Lỗi CreateProcess = 2, Hệ thống không thể tìm thấy tệp được chỉ định – user641887

Các vấn đề liên quan