需求
在Linux服务器上的SpringBoot程序中,调用git clone,之后遍历git仓库中的所有文件。
遍历git仓库可以使用File类实现,现在的问题是需要在SpringBoot程序中调用git clone命令。
实现方式
使用Java native的Process类和ProcessBuilder类来执行命令行。
话不多说,直接上代码(解释都在注解中)
关键代码
注意,这段代码实际上有几个坑,不建议直接复制使用(优化后的代码在文章末尾,建议直接复制使用),具体请看下文
private String executeGitClone() {
Process p = null;
// git clone命令
String cmd = "git clone https://{username}:{pwd}@github.com/{group}/{repo}.git";
try {
// 起子进程执行cmd命令
ProcessBuilder pb = new ProcessBuilder(cmd);
p = pb.start();
// 等待命令执行结束
int exitValue = p.waitFor();
// 创建readers, resReader用于读取标准输出,errReader用于读取错误输出
BufferedReader resReader = new BufferedReader(new InputStreamReader((p.getInputStream())));
BufferedReader errReader = new BufferedReader(new InputStreamReader((p.getErrorStream())));
StringBuilder resStringBuilder = new StringBuilder();
StringBuilder errStringBuilder = new StringBuilder();