hook代码 svn_用checkstyle实现svn的代码规范性检查

【IT168 技术】“代码的规范性与软件缺陷是有紧密联系的,质量高的代码将直接提高软件的质量”。相信每一个软件企业的研发部门都有类似于《XX语言开发规范》的文档,但究竟有多少人会去认真阅读、吃透其中的每一条款,并把其做为代码书写的“圣经”来对待(稍有违反规范的代码将及时重写)?我们需要“用技术手段去解决技术问题”。让我们在最关键的环节—代码仓库SVN—“做手脚”。试想,如果我们能在svn上增加一项功能,在程序员提交代码时进行规范性检查,如果没有通过,将拒绝代码的提交。这将使程序员无法回避“自己所犯的错误”。

技术实现框架

在SVN所在服务器安装一个用于代码检查的工具,此处选择checkstyle(一个开源的著名代码检查工具,可以自定义规则)。如何在commit事件发生的时候调起代码检查工具呢?此处运用svn的hook功能。Svn内置了钩子功能,当有事件发生的时候将自动调起一个程序。我们可以定制这段程序以实现自己的想要的功能。可以接受的事件包括:提交、加锁、解锁、改变等。以“提交”事件举例,当提交事件发生之前将执行hooks中的pre-commit脚本,提交事件之后将执行hooks中的post-commit脚本。于是我们就可以在pre-commit脚本里加入执行checkstyle的命令。此处我们再扩展一下,不直接执行checkstyle,而是先执行一个叫SVNChecker的工具,借助SVNChecker执行CheckStyle。SVNChecker是一个开源的检查框架,他可以做各种检查(不仅仅是代码规范性),并针对各种检查匹配处理模块。也就是说目前虽然只是进行“代码规范性检查”,但是加入SVNChecker后,今后若想进行其他检查,就可以轻而易举的扩展了。

安装checkstyle

Checkstyle官方主页:http://checkstyle.sourceforge.net/

Checkstyle下载页面:http://sourceforge.net/projects/checkstyle/files/checkstyle/5.3/

请到以上页面去下载checkstyle-5.3-bin.zip,并上传到SVN服务器,解压。解压后目录结构如下:

安装svnchecker

SVNChecker官方主页:http://svnchecker.sourceforge.net/overview.php

请到以上页面去下载svnchecker-0.3.tar.gz,并上传到SVN服务器,解压。解压后目录结构如下:

配置checkstyle检查规则

Checkstyle的规则配置文件为xml格式,其定义规则可以到checkstyle主页去查看,其内置了常用的规则,也可以自定义扩展。同时初始安装后自带sun_checks.xml(按照sun的java开发规范定义),免去自定义的麻烦。但是此规则很全,不适用于企业的实际情况。

下面是一段检查规则——“包名只允许出现小写字母”

配置svnchecker检查项

SVNChecker也可以灵活配置,包括:

1. 针对被检查代码的路径进行设置,做到只检查需要检查的代码

2. 对如何检查和如何处理进行配置

3. 对检查规则进行配置

4. 对成功和失败输出进行配置

这些都保存在svncheckerconfig.ini文件中,可参考相关文档进行设置。

下面是一段配置:

[PROJECT]

Main.Regex=^/appfront/src/main/java/

Main.PreCommitChecks=Checkstyle

Checkstyle.FailureHandlers=Console

Checkstyle.Java=/usr/bin/java

Checkstyle.Classpath=$CHECKSTYLE_PATH/checkstyle-5.3-all.jar

Checkstyle.ConfigFile=$CHECKSTYLE_PATH/checks.xml

对^/appfront/src/main/java/下的文件进行检查,其他文件过滤。检查器为checkstyle。失败时将把信息输出到标准输出。Checkstyle执行的java命令路径为/usr/bin/java,要加载$CHECKSTYLE_PATH/checkstyle-5.3-all.jar,检查规则文件路径为$CHECKSTYLE_PATH / checks.xml

修改pre-commit hook

最后,一切设置好后,最关键的就是修改钩子程序了。加入语句:

$SVNCHECKER_PATH/Main.py PreCommit $1 $2 || exit 1

当然不要忘记了赋予此文件的执行权限。

总结

当有代码提交时,此检查框架将运行,保证违反规则的代码被拒绝。程序员的将看到类似如下的信息:

修改代码后即可提交。

根据我企业对此框架的运用总结的经验如下:

1. 不要一次把所有规则都加入,循序渐进,分多批次添加。否则开发人员的修改量会很大。

2. Svnchecker本身会有些bug,有时候需要手工改svnchecker的代码实现自己的需求。

3. Svnchecker项目已不维护,改为RepoGuard(http://repoguard.tigris.org/),有兴趣的同学可以进一步研究此框架。

4. 既然决定用此技术来规范起代码,那么就应该坚持的走下去,即使开发人员提出是否可以放宽要求,也要坚持自己的原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值