首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Checkstyle CustomImportOrder正确地使用IntelliJ?

如何让Checkstyle CustomImportOrder正确地使用IntelliJ?
EN

Stack Overflow用户
提问于 2015-09-21 08:48:49
回答 2查看 20.1K关注 0票数 16

我正在尝试让Checkstyle (通过maven-校验样式-plugin)使用Checkstyle CustomImportOrder模块来检查我的CustomImportOrder导入。尽管根据IntelliJ的默认规则订购了我的进口商品,Checkstyle仍然表示进口订单是错误的。

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

代码语言:javascript
复制
import org.codehaus.jackson.JsonNode;

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

以下是Checkstyle的警告消息:

代码语言:javascript
复制
[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推荐的那样):

代码语言:javascript
复制
<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>

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-25 08:12:55

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

代码语言:javascript
复制
all other imports
<blank line>
javax.* in alphabetical order
java.* in alphabetical order
<blank line>
static imports in alphabetical order

现在,在没有空行的情况下,不可能将javajavax分开排序,这就是为什么会出现违规行为。

我已经提出了关于GitHub的问题来解决这个问题,它需要修改code样式的代码。

作为一种解决方法,您可以在javaxjava之间添加空行,在IntelliJ IDEA配置中,然后可以很容易地调优Checkstyle来处理这个问题。

票数 11
EN

Stack Overflow用户

发布于 2020-10-07 12:17:10

不要将javajavax分成不同的组--让javax站在java包的前面。

checkstyle.xml:

代码语言:javascript
复制
...
    <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

代码语言:javascript
复制
...
<!--  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 )--请检查实际文档。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32690907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档