使用命令行从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); } } } 

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

有没有解决办法,让这个工作?

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

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

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

如果你绝对需要运行命令行git你可以考虑使用JavaGit (它可能有点过时)。 但目前推荐的从Java中管理Git存储库的方法是使用JGit – Git存储的纯Java实现。 Eclipse EGit插件构建于JGit之上