使用命令行从Java调用git

Dav*_*elt 7 java git

当试图调用git命令时,在Java的正常命令行中正确执行,我得到一个奇怪的结果:它什么都不输出.

例如,如果我尝试运行此:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有输出(除了之前打印的命令).好像git还在下载一些东西,但是并没有告诉我.也许它会在完成之后输出所有内容(所以正常的git调用输出,准备好了多少,并且每次更改此行 - 可能因为这样,BufferedReader无法读取已完成的行,因此无法输出它).

是否有任何解决方法,让这个工作?

Von*_*onC 2

您需要检查 git clone 的部分(或大部分)输出是否在 stdout 或 stderr 上(例如,对于 git push 就是这种情况)。

如果是后者,请参阅此示例以读取 stdout 和 stderr。

并使用一个数组作为命令的参数(就像我在“ Runtime.getRuntime().exec()”中所做的那样)。
另请参见从 Java 调用进程