2014-04-30 17 views
6

Khi cố gắng gọi lệnh git, được thực hiện đúng trong dòng lệnh thông thường, từ Java, tôi nhận được kết quả lạ: nó không xuất được kết quả nào.Gọi git từ Java với dòng lệnh

Ví dụ, nếu tôi cố gắng chạy này:

public class GitTest { 
    public static void main(String args[]) throws IOException{ 
     String command = "git clone http://git-wip-us.apache.org/repos/asf/accumulo.git"; 
     Process p = Runtime.getRuntime().exec(command); 
     BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line; 
     String text = command + "\n"; 
     System.out.println(text); 
     while ((line = input.readLine()) != null) { 
      text += line; 
      System.out.println("Line: " + line); 
     } 
    } 
} 

tôi nhận được không có đầu ra (trừ lệnh, mà được in trước đó). Có vẻ như git vẫn đang tải xuống thứ gì đó, nhưng không nói với tôi. Có thể nó sẽ xuất tất cả mọi thứ sau khi nó hoàn thành (vì vậy đầu ra cuộc gọi git bình thường, bao nhiêu đã sẵn sàng, và thay đổi dòng này mọi lúc - có thể vì điều này BufferedReader không thể đọc dòng đã hoàn thành và do đó không xuất nó).

Có cách nào khác để làm việc này không?

Trả lời

2

Bạn cần kiểm tra xem một số (hoặc hầu hết) đầu ra của git clone có ở chế độ stdout hoặc stderr (it is the case, for instance, for git push) hay không.

Nếu sau này, xem this example để đọc cả stdout và stderr.

Và sử dụng một mảng cho các tham số của lệnh của bạn (như tôi đã làm trong "Runtime.getRuntime().exec()").
Xem thêm Invoking Processes from Java.

+0

Cảm ơn, StreamGobbler đã làm điều đó. –

0

Nếu bạn hoàn toàn cần chạy dòng lệnh git, bạn có thể xem xét sử dụng JavaGit (có thể hơi lỗi thời). Tuy nhiên, cách được khuyến nghị hiện tại để quản lý kho Git từ bên trong Java là sử dụng JGit - việc thực thi Java tinh khiết cho lưu trữ Git. Plugin Eclipse EGit được xây dựng trên đầu trang của JGit

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