如何让Checkstyle CustomImportOrder正确使用IntelliJ?

时间:2015-09-21 08:48:49

标签: java maven intellij-idea checkstyle

我试图通过使用Checkstyle CustomImportOrder模块检查Checkstyle(通过maven-checkstyle-plugin)来检查IntelliJ导入。尽管根据IntelliJ的默认规则订购了我的导入,但Checkstyle仍然说导入顺序错误。

这是我的导入(根据IntelliJ规则(ctrl + o)订购:

import org.codehaus.jackson.JsonNode;

import javax.sql.rowset.serial.SQLOutputImpl;
import java.util.ArrayList;
import java.util.List;

这里是来自Checkstyle的警告信息:

[WARNING] src\main\java\com\example\hej\EnKlass.java[5] (imports) CustomImportOrder: Import statement is in the wrong order. Should be in the 'SPECIAL_IMPORTS' group.
[WARNING] src\main\java\com\example\hej\EnKlass.java[6] (imports) CustomImportOrder: Import statement is in the wrong order. Should be in the 'STANDARD_JAVA_PACKAGE' group.
[WARNING] src\main\java\com\example\hej\EnKlass.java[7] (imports) CustomImportOrder: Import statement is in the wrong order. Should be in the 'STANDARD_JAVA_PACKAGE' group.

这是我的checkstyle.xml CustomImportOrder规则(由Checkstyle网站推荐用于IntelliJ):

<module name="CustomImportOrder">
    <property name="customImportOrderRules" value="THIRD_PARTY_PACKAGE###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE###STATIC"/>
    <property name="specialImportsRegExp" value="^javax\."/>
    <property name="standardPackageRegExp" value="^java\."/>
    <property name="sortImportsInGroupAlphabetically" value="true"/>
    <property name="separateLineBetweenGroups" value="false"/>
</module>

这可能是什么问题?我一直试图改变规则,没有运气。我也试图删除/操纵正则表达式没有运气。

2 个答案:

答案 0 :(得分:6)

IntelliJ中的默认格式如下所示:

all other imports
<blank line>
javax.* in alphabetical order
java.* in alphabetical order
<blank line>
static imports in alphabetical order

目前,如果没有空白行,则无法单独对javajavax进行排序,这就是您违规的原因。

我已经提出issue on GitHub来解决这个问题,并且需要更改Checkstyle代码。

作为一种解决方法,您可以在IntelliJ IDEA配置中的javaxjava之间添加空行,然后调整Checkstyle以便使用它。

答案 1 :(得分:0)

不要将javajavax分成不同的组-只需让javax放在java软件包之前。

checkstyle.xml:

...
    <module name="CustomImportOrder">
        <property name="customImportOrderRules" value="THIRD_PARTY_PACKAGE###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE###STATIC"/>
        <property name="sortImportsInGroupAlphabetically" value="true"/>
        <property name="standardPackageRegExp" value="^(java|javax)\."/>
        <property name="separateLineBetweenGroups" value="true"/>
    </module>
...

checkstyleSuppressions.xml

...
<!--  Let javax.* stand before java.* - that's default Idea settings  -->
<suppress checks="CustomImportOrder"
          message="Wrong lexicographical order for 'java\.[^']+' import\. Should be before 'javax\.[^']+'\."/>
...

您还可以忽略与默认值匹配的属性(今天为standardPackageRegExpseparateLineBetweenGroups)-请查看实际文档。