Java 代码质量控制与风格统一

阿里巴巴 Java 开发规范

《阿里巴巴Java开发手册》于 2017-02-09 对外正式发布, 一经发布便成为 IT 圈热点, 截止目前最新版本为 1.4.0 (最后更新日期 2018.5.20), 下载地址.

阿里云大学后续又基于手册推出了编码规范认证, 认证通过可以获取电子证书, 某些互联网公司都鼓励员工学习并考取证书.

阿里巴巴进一步推出了相关插件, 项目取名 p3c: https://github.com/alibaba/p3c. 关于 p3c 的由来有种说法是: p3c 是老美的先进反潜侦察机, 阿里将代码规范检查插件命名为 p3c, 大概就是取其先进、监测的意思吧.

IDEA 插件

安装 IntelliJ IDEA 插件 Alibaba Java Coding Guidelines

安装完毕, 根据提示重启 IntelliJ, 默认开启了实时检测功能, 如下图所示, 会将有问题的地方用红色下划线标出.

将光标移到红线上, 会有相关提示. 在 IDEA 中按快捷键 F2 会 (按优先级) 跳到下一处有问题的地方. 部分问题还可以使用 Option+Enter (Mac) 快捷键, 调出修改建议, 然后自动 Fix!

集成到 CI 流程中

前面的方式, 需要本地安装插件, 更重要的是, 需要开发掌握并遵守这些规范. 作为一个团队/公司需要有一种方式整体把控代码质量和风格, 这里就不得不提 SonarQube, 它是更专业的、企业级代码质量管理工具.

在我司后面可能会由平台运维团队提供 SonarQube 统一平台, 那么在此之前, 能否有一种轻量级的解决方案. 这里选择的是 maven plugin 和 jenkins plugin 来共同完成, 效果如下图所示.

点击查看 pmd 高优先级问题

build/plugins 下添加 maven-pmd-plugin 插件, 并配置阿里巴巴 Java 规范 p3c-pmd. 注意: maven-pmd-plugin 最新版是 3.11.0, 但 p3c-pmd 的最新版 (1.3.6) 只支持到 3.8.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-pmd-plugin</artifactId>
  <version>3.8</version>
  <configuration>
    <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
    <targetJdk>${java.version}</targetJdk>
    <printFailingErrors>true</printFailingErrors>
    <excludeRoots>
      <excludeRoot>target/generated-sources/thrift</excludeRoot>
    </excludeRoots>
    <rulesets>
      <ruleset>rulesets/java/ali-comment.xml</ruleset>
      <ruleset>rulesets/java/ali-concurrent.xml</ruleset>
      <ruleset>rulesets/java/ali-constant.xml</ruleset>
      <ruleset>rulesets/java/ali-exception.xml</ruleset>
      <ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>
      <ruleset>rulesets/java/ali-naming.xml</ruleset>
      <ruleset>rulesets/java/ali-oop.xml</ruleset>
      <ruleset>rulesets/java/ali-orm.xml</ruleset>
      <ruleset>rulesets/java/ali-other.xml</ruleset>
      <ruleset>rulesets/java/ali-set.xml</ruleset>
    </rulesets>
  </configuration>
  <executions>
    <execution>
      <phase>verify</phase>
      <goals>
        <goal>check</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>com.alibaba.p3c</groupId>
      <artifactId>p3c-pmd</artifactId>
      <version>1.3.6</version>
    </dependency>
  </dependencies>
</plugin>

reporting/plugins 下添加 maven-jxr-plugin 插件, 这样可以跳转到对应代码的位置.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jxr-plugin</artifactId>
</plugin>

Jenkins 需要安装 checkstyle, findbugs, pmd 插件, 之后创建 Maven 项目, 其他详细配置如下:

EditorConfig

EditorConfig 用于多人协同开发时, 统一代码风格, IDEA, Sublime 等主流 IDE 和文本编辑器都支持 EditorConfig. 在我们的 java 项目中, .editorconfig 配置如下

root = true

[*.{java,xml,yml}]
charset = utf-8
indent_style = space
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.java]
indent_size = 4
continuation_indent_size = 8

[*.{xml,yml}]
indent_size = 2
continuation_indent_size = 4

我们在写代码时, 使用快捷键 Shift+Command+Enter (格式化所在行), Option+Command+L (格式化整个代码文件), 将按 EditorConfig 配置统一格式化, 这样就实现了团队内的风格统一.

待办

相关推荐