java - 在协作 Java 开发中强制执行代码格式化规则

标签 java eclipse mercurial code-formatting policy

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




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

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

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

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

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

    到目前为止我做了什么 :

    我将以下行添加到我的 .hgrc 以创建一个钩子(Hook)。
    [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 配置。

  • 我的问题

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

    先感谢您 ;)

    最佳答案

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

    http://jalopy.sourceforge.net/

    关于java - 在协作 Java 开发中强制执行代码格式化规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23173219/

    相关文章:

    java - 在多个gradle子项目之间共享类路径配置

    Eclipse:不区分大小写的下一个单词快捷方式

    java - 带有自定义 ListView 的 Android 对话框

    java - 如何在Java类中获取当前数据库

    c++ - Eclipse CDT 中的格式(换行)构造函数初始化程序列表

    git - 如何使用 token 操作 Bitbucket 存储库?

    git - 当对版本控制的提交要求开发人员更改他们自己的配置时

    java - 如何将一个 Maven 项目用作另一个 Maven 项目的依赖项?

    java - 为什么 int 会发生这种情况?

    java - 在 MongoDB 中创建测试数据