大项目往往是有很多人一起完成的,然而每个人都有自己的style,导致整个项目的代码不仅存在不符合语言规范的情况,而且读起来非常困难。因此,这样的项目中都会引入Checkstyle,来规范大家的编码风格,尽量做到统一和合理。我们在代码写完之后,还要花时间去手动解决Checkstyle提示的问题,这是一个非常无聊和耗时的工作。下面介绍如何利用Eclipse配置,在我们写完代码并保存之后,Eclipse就会自动帮我们解决Checkstyle问题。
1. Formatter设置
Eclipse工具栏上选择Window -> Preferences -> Java -> Code Style -> Formatter,进入如下界面:
Active profile中显示的是当前正在使用的代码自动格式化配置。点击“Export All...”按钮可以导出Eclipse中的代码自动格式化配置,点击“Import...”按钮可以导入本地已有的配置文件,导入和导出的文件都是xml格式。可以点击“New...”按钮,在Eclipse中的一个已有配置基础上,新建一个自己的配置。
下面重点介绍如何进行代码自动格式化配置。点击“Edit...”按钮,进入如下Formatter配置界面:
上面红色框标记的选项卡中,是所有可以配置的选项。下面对每个选项卡大致可以设置的内容进行简单介绍:
- Indentation缩进
Tab policy指定是否可以使用Tab键,有Spaces only(只支持空格键),Tabs only(只支持Tab键)和Mixed(同时支持空格键和Tab键)。为了保证代码在不同IDE和运行环境的兼容性和一致性,强烈建议选择Spaces only。Indentation size指定每次缩进多少个空格,Tab size指定一个Tab键相当于多少个空格。在Spaces only情况下,按Tab键,会自动转化成对应数量的空格。
Align fields in columns指定属性是否按列对齐。
Indent框中指定Java Code中常见元素是否缩进。
- Braces大括号
Braces positions指定Java Code中一些元素的大括号的位置,大概有Same line(同行),Next line(下行),Next line indented(下行缩进)等选择。
- White Space空格
控制在Declarations、Control statements、Expressions、Arrays和Parameterized types这几类元素中的相应位置插入空格。
- Blank Lines空行
控制class文件中元素之间空行的数量,基本上采用默认值。
- New Lines新行
控制class文件中元素是否插入新的一行。
- Control Statements控制语句
控制像if和else,do和while,以及try、catch和finally成套的控制关键字的位置。
- Line Wrapping换行
Maximum line width控制每行的最大字符数。
Default indentation for wrapped lines指定换行时缩进多少个空格。
还可以详细控制class各元素是否换行。
- Comments注释
对各种注释(包括文件头注释,行注释,块注释,Javadoc注释)进行格式设置。
2. Save Actions设置
进行Formatter设置后,你就可以使用Ctrl + Shift + F或者Source -> Format格式化选择的代码。其实,还有一种更好的方法,在每次写完代码并保存class文件的时候,自动格式化该文件的代码。选择Window -> Preferences -> Java -> Editor -> Save Actions进入如下界面:
选择“Perform the selected actions on save”以及下面的三个复选框,其中“Format source code”就是根据前面设置的Formatter对Save文件中的代码进行自动格式化,可以选择仅针对修改过的代码还是针对所有代码。“Additional actions”是添加一些Save时的额外操作,可以点击“Configure...”按钮对额外操作进行设置,设置界面如下:
- Code Organizing代码组织
可以设置删除末尾的空格,正确的缩进,以及对成员进行排序。
- Code Style代码风格
可以设置控制语句和表达式,最重要的是还可以设置所有的parameter为final。
- Member Access成员访问
设置是否需要this来访问非static的属性和方法,同时也可以设置static的属性和方法。
- Missing Code遗漏代码
设置是否是否补齐遗漏的“@Override”和“@Deprecated”。
- Unnecessary Code不必要代码
删除不必要的代码,例如:没用的import,没用的private成员,没用的local变量等。