Как запустить команды Git из Java?

304
28 мая 2017, 20:00

Я могу запускать команды, git add, git commit, прямо из Git. Но есть ли какие-либо методы, чтобы я мог запускать команды непосредственно из java.

Answer 1

Не знаю как это описать на русском. Но в Java есть класс Runtime для соответствующей работы.

У него есть метод getRuntime(), который возвращает соответствующий приложению Runtime, а также есть метод exec(String command), который в отдельном процессе запускает команду, представленную переданной строкой. Возвращаемый объект :py:class::java.lang.Process и может быть использован для управления выполнением этого процесса. Собственно их и можно использовать. Пример:

Runtime.getRuntime().exec("git add");

Естественно с try/catch и прочими проверяющими конструкциями

P.S.

Нашел описание методов на русском, чтоб ознакомиться проще было. Источник ilnurgi1.ru:

class java.lang.Runtime

getRuntime() - Возвращает соответсвующий приложению Runtime

exit(int status) public void - Осуществляет завершение программы с кодом завершения status (при использовании этого метода особое внимание нужно уделить обработке исключений - выход будет осуществлен моментально, и в конструкциях try-catch-finally управление в finally передано не будет)

gc() public native void - Сигнализирует сборщику мусора о необходимости запуска

freeMemory() public native long - Возвращает количество свободной памяти. В некоторых случаях это количество может быть увеличено, если вызвать у объекта Runtime метод gc()

totalMemory() public native long - Возвращает суммарное количество памяти, выделенное Java машине. Это количество может из изменяться даже в течении одного запуска, что зависит от реализации платформы на которой запущена Java машина. Так-же, не стоит закладываться на объем памяти, занимаемой одним определенным объектом - эта величина так же зависит от реализации Java машины.

loadLibrary(String libname) public void - Загружает библиотеку с указанным именем. Обычно загрузка библиотек производится следующим образом: в классе, использующем native реализации методов, добавляется статический инициализатор, например:

static {
    System.loadLibrary("LibFile");
}

Таким образом, когда класс будет загружен и инициализирован, необходимый код для реализации native методов так-же будет загружен. Если будет произведено несколько вызовов загрузки библиотеки с одним и тем-же именем - произведен будет только первый, а все остальные будут проигнорированы.

load(String filename) public void - Подгружает файл с указанным названием в качестве библиотеки. В принципе, этот метод работает так-же как и метод load(), только принимает в качестве параметра именно название файла, а не библиотеки, тем самым позволяя загрузить любой файл с native кодом.

runFinalization() public void - Производит запуск выполнения методов finalize() у всех объектов, этого ожидающих

exec(String command) public Process - В отдельном процессе запускает команду, представленную переданной строкой. Возвращаемый объект :py:class::java.lang.Process может быть использован для управления выполнением этого процесса.

READ ALSO
Android Studio / Случайный размер View в dp

Android Studio / Случайный размер View в dp

Недавно начал заниматься в Android StudioПостоянно обращаюсь для решения вопросов на этот ресурс

269
Как решить пример с прогрессией?

Как решить пример с прогрессией?

Нужно решить P=2/3*4/5*6/7

284
Как в цикле событие кнопок добавить?

Как в цикле событие кнопок добавить?

Пишу "крестики ноли"Создал 9 панелей по девять кнопок

430
не определяются java классы

не определяются java классы

Возник вопрос, копаюсь долго не могу решить: что-то слетело в студио и java классы во всех проектах не определяются, вместо привычного значка...

245