Мне нужно написать хук Git перед фиксацией на Java, который проверял бы, отформатирован ли код, зафиксированный разработчиком, в соответствии с определенным форматером кода eclipse перед его фактической фиксацией, в противном случае он отклонялся бы от фиксации. Можно ли написать хук перед фиксацией на Java?
Написать крючок предварительной фиксации GIT в java?
Ответы (3)
Идея состоит в том, чтобы вызвать скрипт, который, в свою очередь, вызывает вашу java-программу (проверка формата).
Вы можете см. здесь пример, написанный на python, который вызывает java.
try:
# call checkstyle and print output
print call(['java', '-jar', checkstyle, '-c', checkstyle_config, '-r', tempdir])
except subprocess.CalledProcessError, ex:
print ex.output # print checkstyle messages
exit(1)
finally:
# remove temporary directory
shutil.rmtree(tempdir)
Этот другой пример напрямую вызывает ant
для выполнения сценария ant (который, в свою очередь, вызывает набор тестов Java JUnit)
#!/bin/sh
# Run the test suite.
# It will exit with 0 if it everything compiled and tested fine.
ant test
if [ $? -eq 0 ]; then
exit 0
else
echo "Building your project or running the tests failed."
echo "Aborting the commit. Run with --no-verify to ignore."
exit 1
fi
Начиная с Java 11 теперь вы можете запускать нескомпилированные файлы основного класса с помощью команды java.
$ java Hook.java
Если вы удалите .java
и добавите шебанг в верхнюю строку следующим образом:
#!/your/path/to/bin/java --source 11
public class Hook {
public static void main(String[] args) {
System.out.println("No committing please.");
System.exit(1);
}
}
затем вы можете просто выполнить его так же, как и любой другой файл сценария.
$ ./Hook
Если вы переименуете файл pre-commit
, а затем переместите его в свой каталог .git/hooks
, у вас теперь будет рабочий Java Git Hook.
Вы можете написать хук на любом языке, понятном оболочке, с правильно настроенным интерпретатором (bash, python, perl) и т.д.
Но почему бы не написать свой форматировщик java-кода на java и не вызвать его из хука перед фиксацией.