我需要用Java编写一个Git pre commit hook,它会在实际提交之前检查开发人员提交的代码是否根据特定的eclipse代码格式化程序进行了格式化,否则拒绝提交。是否可以用 Java 编写预提交挂钩?
问问题
9393 次
3 回答
7
这个想法是调用一个脚本,然后调用你的java程序(检查格式)。
您可以在这里看到一个用 python 编写的示例,它调用 java.util.
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
于 2012-11-06T07:41:29.020 回答
2
从 Java 11 开始,您现在可以使用 java 命令运行未编译的主类文件。
$ java Hook.java
如果您像这样剥离.java
并在顶行添加一个shebang:
#!/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。
于 2020-05-19T19:32:23.810 回答
1
您可以使用任何可以被 shell 理解的语言编写钩子,并使用正确配置的解释器(bash、python、perl)等。
但是,为什么不在 java 中编写您的 java 代码格式化程序,并从 pre-commit 挂钩调用它。
于 2012-11-06T07:27:11.623 回答