如何在IDEA中通过Gradle设置checkstyle配置

4
我正在使用IDEA中的Checkstyle插件。 我想为不同的模块设置不同的Checkstyle配置。 我正在使用gradle作为构建工具-版本4-,我想编写一个任务来修改相应的模块的.iml文件。有任何好主意吗? 我的第一次尝试是修改iml文件,可以查看此处
apply plugin: 'idea'


task setCheckStylePluginSettings {
    group = "Idea"
    description = "Copies CheckStyle plugin settings to Idea workspace."

    println "Step 1."
    idea.module.iml {
    withXml {xmlProvider ->
        // Get root node.
        println "Step 2."
        def project = xmlProvider.asNode()
        }
    }
 }

然而,我在一开始就卡住了,甚至无法在控制台上看到打印的 Step 2


2
请查看 https://youtrack.jetbrains.com/issue/IDEA-127013#comment=27-1726264 以及后续评论。 - CrazyCoder
你可能也想看看这个问题 - barfuin
@ThomasJensen 谢谢,您提出的解决方案实际上是可行的,我会在有时间更新文件时尝试一下,并及时告知结果。 - Guillotine1789
@ThomasJensen 我已经尝试过了,它有效了,谢谢。 - Guillotine1789
2个回答

1
在IntelliJ中,"module"与Gradle中的SourceSet一一对应,假设您使用"Create separate modules per source set"选项导入项目。默认情况下,Checkstyle插件会为每个添加到构建中的源集添加任务。因此,当您应用java插件时,应已经有了checkstyleMain和checkstyleTest这些任务,它们就是您要查找的内容。现在,要自定义它们,在您的build.gradle文件中进行如下配置:
checkstyleMain {
    configFile = file("${rootDir}/checkstyle/main.xml")
}

checkstyleTest {
    configFile = file("${rootDir}/checkstyle/test.xml")
}

这里假设你的项目中有不同的Checkstyle配置文件,位于${rootDir}/checkstyle/路径下。

是的,我已经为sourcesets创建了不同的模块。但我认为这个解决方案不会配置IDEA Checkstyle插件,它只会配置gradle任务,我错了吗?我猜想IDEA插件将针对**.iml**文件进行检查,而您建议的解决方案对其没有任何好处。我想让IDEA checkstyle插件积极检查每个模块的违规情况,并进行正确的配置。谢谢。 - Guillotine1789
不,它不会配置编辑器中使用的插件。你所建议的方法容易出错,并且在多个环境(不使用IntelliJ的开发人员、CI或任何构建环境等)中无法重复。关于IntelliJ checkstyle插件的配置格式或其工作原理,没有公共文档可供参考,因此他们可以自由地更新/更改不同版本的IntelliJ(我相信他们已经这样做了)。 - nickb
你说得对,它可能会改变。我已经检查了IDEA在将checkstyle配置添加到.iml文件时如何进行修改,我的目标是自动化开发人员视角下的操作,以便在开发过程中实时查看checkstyle效果。在CI或其他情况下,我们仍将从gradle任务触发。老实说,在Eclipse中做这件事要容易得多。无论如何,感谢您的帮助。 - Guillotine1789

0

所以问题解决了。我尝试了Thomas Jansen在这个 question 上提出的解决方案。

但是我会提供更多关于如何做的信息。

为了给不同的sourcesets提供不同的checkstyle模块,您需要在模块中定义id标签。如下所示:

  <module name="ConstantName">
     <property name="id" value="ConstantNameMain"/>
     <property name="severity" value="error"/>
     <property name="applyToPrivate" value="false"/>
     <property name="format" value="^[A-Z][A-Za-z0-9]*(_[A-Za-z0-9]+)*$"/>
  </module>
  <module name="ConstantName">
     <property name="id" value="ConstantNameTest"/>
     <property name="severity" value="error"/>
     <property name="applyToPrivate" value="false"/>
     <property name="format" value="^[A-Z][A-Za-z0-9]*(_[A-Z0-9]+)*$"/>
  </module>

然后我们为 suppression.xml 定义了一个 SuppressionFilter 模块,该文件可以与您的 checkstyle.xml 放在同一个文件夹中。重要的一点是将 SuppressionFilter 模块定位为 Checker 模块。

<module name="Checker">
  <property name="severity" value="warning"/>
   <module name="SuppressionFilter">
       <property name="file" value="./suppressions.xml"/>
   </module>
  <module name="TreeWalker">
  .
  .
  .
  </module>
</module>

然后,我们将suppression.xml文件定义如下:

<suppressions>
    <!-- >Test sources suppressions</!-->
    <suppress files="[\\/]src[\\/]test[\\/].*" id="ConstantNameMain" />

    <!-- >Main sources suppressions</!-->
    <suppress files="[\\/]src[\\/]main[\\/].*" id="ConstantNameTest" />
</suppressions> 

最后,配置您的Checkstyle-IDEA插件,从“设置>编辑器>检查>Checkstyle”中激活实时扫描,然后您就完成了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接