《阿里巴巴Java开发手册》于 2017-02-09 对外正式发布, 一经发布便成为 IT 圈热点, 截止目前最新版本为 1.4.0 (最后更新日期 2018.5.20), 下载地址.
阿里云大学后续又基于手册推出了编码规范认证, 认证通过可以获取电子证书, 某些互联网公司都鼓励员工学习并考取证书.
阿里巴巴进一步推出了相关插件, 项目取名 p3c: https://github.com/alibaba/p3c. 关于 p3c 的由来有种说法是: p3c 是老美的先进反潜侦察机, 阿里将代码规范检查插件命名为 p3c, 大概就是取其先进、监测的意思吧.
安装 IntelliJ IDEA 插件 Alibaba Java Coding Guidelines
安装完毕, 根据提示重启 IntelliJ, 默认开启了实时检测功能, 如下图所示, 会将有问题的地方用红色下划线标出.
将光标移到红线上, 会有相关提示. 在 IDEA 中按快捷键 F2
会 (按优先级) 跳到下一处有问题的地方.
部分问题还可以使用 Option+Enter (Mac) 快捷键, 调出修改建议, 然后自动 Fix!
前面的方式, 需要本地安装插件, 更重要的是, 需要开发掌握并遵守这些规范. 作为一个团队/公司需要有一种方式整体把控代码质量和风格, 这里就不得不提 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 项目, 其他详细配置如下:
slave-thrift-python
-DskipTests clean compile findbugs:findbugs pmd:pmd checkstyle:checkstyle
(注意 findbugs 依赖于 compile 结果)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 配置统一格式化, 这样就实现了团队内的风格统一.