在协作Java开发中实施代码格式规则

时间:2014-04-19 17:31:25

标签: java eclipse mercurial code-formatting policy

我们是一个致力于常见Java / Maven项目的开发团队。我们使用不同版本的Eclipse,一个常见的Mercurial存储库(在Bitbucket上)和三个不同的操作系统。由于每个开发人员都有他/她的个人偏好,我们都使用不同的编码样式和代码格式(在同一行上的“else”/与前一个结束括号不同,或者每行使用最多80/100/120个字符,因为一些使用比其他人有更大的屏幕,等等。因此,当代码提交到存储库时,有时会出现类的更改,即使只更改了格式。这使得真正的变化难以追踪。

因此,我们正在讨论解决方案,如果我们同意项目标准,那么可能最好的解决方案,从现在开始,回购中的每个代码都必须符合此标准。如果一个同事从repo中检出代码,工具会将其转换为他/她喜欢的格式,并在提交之前将其转换回repo标准。

我想知道是否有用于格式化代码的工具,

  • 可以在任何操作系统上运行
  • 可以轻松且广泛地配置(例如Eclipse格式化程序)
  • 允许共享配置
  • 并且可以在没有开发人员注意到它存在的情况下运行。
  • OPTIONALLY也可以从控制台运行或作为单独的任务运行(例如从maven运行)
  • OPTIONALLY是免费的

关于自动化的要点非常重要:我应该通过强制他/她运行特殊脚本或在每次提交时按下额外按钮来轻松集成并且理想情况下不会打扰开发人员。

到目前为止我做了什么

我在.hgrc中添加了以下行来创建一个钩子。

[hooks]
precommit = python:.hg/perform_code_formatting.py:perform

并创建了一个名为perform_code_formatting.py

的文件
import re,os,sys,mercurial

def perform(repo, **kwargs):
   from subprocess import call
   call(["ls", "-l"])

当然,call最终会被代码格式化工具取代。但是这种方法已经存在缺陷,因为我不确定它会在任何操作系统上运行并满足上述所有要求。

工具

  • beautyj:在java上运行,但没有足够的配置选项
  • indent / astyle:功能强大的工具,但依赖于操作系统
  • Jindent:不自由
  • eclipse格式化程序:到目前为止最好的选择。也可以从控制台运行。但是,由于每个人都有不同的安装目录,因此必须进行一些初步工作,并且必须在每个工作站上单独完成脚本/ mercurial配置。

我的问题

是否有符合我列出的所有要求的工具?有没有人对这种“不同的格式问题”有任何经验,并提出解决方案/工作流程/政策来处理它?

提前谢谢你;)

1 个答案:

答案 0 :(得分:0)

您可以使用Jalopy,一种用于代码格式化的开源工具。可能你的团队可以试试这个。

http://jalopy.sourceforge.net/