在AS中配置自己的CheckStyle

CheckStyle检查的主要内容

  1. Javadoc注释
  2. 命名约定
  3. 标题
  4. import语句
  5. 体积大小
  6. 空白
  7. 修饰符
  8. 代码问题
  9. 类设计
  10. 混合检查(包活一些有用的比如非必须的System.out和printstackTrace)

如何配置

首先,新建一个XXX.gradle文件,写入如下信息:

apply plugin: 'checkstyle'  // 必须

check.dependsOn 'checkstyle'  // 必须

checkstyle {
    toolVersion '6.19' // 必须
    ignoreFailures false  // 建议关闭
    showViolations true  // 建议开启
}

// 必须
task checkstyle(type: Checkstyle) {
    configFile rootProject.file('checkstyle.xml')
    source 'src'
    // 可以配置多个
    include '**/*.java'
    // 可以配置多个
    exclude '**/gen/**'

    classpath = files()
}

然后再各个Module中,加入对这个XXX.gradle文件的引用:

apply from: rootProject.file('XXX.gradle')

如何运行

terminal

./gradlew checkstyle(这个就是上面task的名字)

AS中配置

Android Studio Run之前执行checkstyle。

选择菜单Run--Edit Configurations,如下图:

checkstyle.xml如何编写

http://checkstyle.sourceforge.net/checks.html

对应的中文的解释(不是很全的~):中文

更进一步 checkstyle + git hook

现在有需求,在代码提交的时候,强制进行checkstyle的检查,任何失败的都不能入库。这个需要怎么办呢?

git hook

git钩子能在特定的动作发生时触发自定义的脚本,执行特性需求的功能。钩子大体分为2种:

  • 客户端钩子
  • 服务端钩子

开启钩子

钩子都被存储在 Git 目录下的 hooks 子目录中。 也即绝大部分项目中的 .git/hooks。 当你用 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。这些示例都是以.sample结尾,并不能执行,需要启动他们,移除后缀,以一个合适的后缀命名,并改变文件的属性,使其可执行。

客户端钩子

克隆某个版本库时,它的客户端钩子 并不 随同复制。 如果需要靠这些脚本来强制维持某种策略,建议你在服务器端实现这一功能。

  • pre-commit:钩子在提交信息到本地前运行。如果该钩子以非零值退出,Git 将放弃此次提交,不过你可以用git commit --no-verify来绕过这个环节。
  • post-commit:钩子在整个提交过程完成后运行,不接受参数,一般用作某些通知之类的事情。

其实客户端还有很多的钩子,比如我的一个项目下的钩子:

服务端钩子

客户端钩子无法做到强制执行,这时可以采用服务器端的钩子对项目强制执行各种类型的策略。

这些钩子脚本在推送到服务器之前和之后运行。 推送到服务器前运行的钩子可以在任何时候以非零值退出,拒绝推送并给客户端返回错误消息,还可以依你所想设置足够复杂的推送策略。

  • pre-reveive:处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive。 它从标准输入获取一系列被推送的引用。如果它以非零值退出,所有的推送内容都不会被接受。
  • update:update 脚本和 pre-receive 脚本十分类似,不同之处在于它会为每一个准备更新的分支各运行一次。 假如推送者同时向多个分支推送内容,pre-receive 只运行一次,相比之下 update 则会为每一个被推送的分支各运行一次。 它不会从标准输入读取内容,而是接受三个参数:引用的名字(分支),推送前的引用指向的内容的 SHA-1 值,以及用户准备推送的内容的 SHA-1 值。 如果 update 脚本以非零值退出,只有相应的那一个引用会被拒绝;其余的依然会被更新。
  • post-receive:钩子整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。它可以通知CI系统,或者其他测试系统。需要注意的是该脚本无法终止推送进程,客户端在它结束运行之前将保持连接状态,所以如果你想做其他操作需谨慎使用它,因为它将耗费你很长的一段时间。

一般服务端的钩子:

开启客户端钩子的示例

需要如下条件:

  • jdk和git环境
  • 对应的脚本文件
  • 可执行的checkstyle的jar包
  • 规则配置xml文件

部署到项目中即可。

results matching ""

    No results matching ""