Итак, я пытаюсь запустить команду Git через Java. В настоящее время я работаю в Windows с интерфейсом git bash и установленной Java 8.
Когда я запускаю эту команду через git bash: git --git-dir=PathToMyGitRepo log --pretty=format:'{"commit":"%H"},%n'
, я получаю вывод в формате JSON всех моих журналов в этом хранилище, таким образом делаяразбирать легко. Сгенерированный JSON выглядит следующим образом
{"commit":"SHA1"},
{"commit":"SHA2"},
...
Итак, я перенес команду в свое приложение Java и использовал API ProcessBuilder для запуска предыдущей команды. Команда выполняется без каких-либо исключений, но выходные данные, которые я получаю с помощью метода getInputStream, возвращают что-то вроде
'{commit:SHA1},''{commit:SHA2},'
, которое не является допустимой строкой JSON. Одиночные кавычки были сохранены, двойные кавычки были брошены, даже символы следующей строки были несколько потеряны.
Я попытался напечатать ту же самую команду, просто перед тем, как ProcessBuilder запустил ее, а затем запустил сам. Даже перенаправленный вывод команды в файл через bash и через Java дает разные результаты.
Кто-то знает, что здесь происходит? Я подозреваю, что Java запускает какие-то настройки и запускает внешнюю программу, но я не понимаю, как это повлияет на вывод указанной программы.
-----------------------------------------------------------------РЕДАКТИРОВАТЬ------------------------------------------------------------
Итак, по запросу это код кода того, как я получаю InputStream:
BufferedInputStream bis = null
try{
List<String> gitCommand = new ArrayList<>(Arrays.asList("git", "--git-dir=PathToMyGitRepo", "log", "--pretty=format:'{\"commit\":\"%H\"},%n'"));
Process p = new ProcessBuilder(gitCommand).start();
bis = (BufferedInputStream) p.getInputStream();
String buff = "";
String JSON = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(bis));
while((buff = bis.readLine())!=null){
JSON += buff;
}
System.out.println(JSON);
}catch(IOException ex){
...
}
Я несделайте что-нибудь кроме разбора строки JSON
, которую я получу. Но тогда я получаю ParsingError: Unexpected character (') at position 1.
. Я использую библиотеку SimpleJSON для своих вещей, связанных с JSON.