【问题标题】:How do I get Checkstyle CustomImportOrder to work with IntelliJ properly?如何让 Checkstyle CustomImportOrder 正确使用 IntelliJ?
【发布时间】:2015-12-17 21:33:54
【问题描述】:

我正在尝试让 Checkstyle(通过 maven-checkstyle-plugin)使用 Checkstyle CustomImportOrder 模块检查我的 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>

这里可能有什么问题?我一直试图改变规则,但没有运气。我也尝试过删除/操作正则表达式,但没有成功。

【问题讨论】:

    标签: java maven intellij-idea checkstyle


    【解决方案1】:

    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 以使用它。

    【讨论】:

    • 谢谢。我想是这样的。我会让这个检查直到它被修复,因为我们现在不想更改任何 IDEA 配置。
    【解决方案2】:

    不要将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 今天) - 请查看实际文档。

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2019-08-11
      • 2018-12-21
      • 2015-06-29
      • 2021-07-10
      • 2015-09-03
      • 2011-09-27
      • 2015-11-29
      • 2011-09-18
      相关资源
      最近更新 更多