禁用Gradle 'build.gradle'文件中的Checkstyle规则

j9per5c4  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(257)

您可以从Gradle运行Checkstyle linter,而无需编写配置.xml文件。

/// Checkstyle linter
// Run by `gradle check`, which is run by `gradle build`
apply plugin: 'checkstyle'
ext.checkstyleVersion = '10.5.0'
configurations {
  checkstyleConfig
}
dependencies {
  checkstyleConfig("com.puppycrawl.tools:checkstyle:${checkstyleVersion}") { transitive = false }
}
checkstyle {
  toolVersion "${checkstyleVersion}"
  ignoreFailures = false
  config = resources.text.fromArchiveEntry(configurations.checkstyleConfig, 'google_checks.xml')
}

但是,我不知道如何禁用/抑制特定检查,仍然来自build.gradle文件。
我想禁用LineLength检查。这些都不起作用:

checkstyle {
  ...
  configProperties += ['LineLength.max': 140]
  configProperties += ['LineLength.enabled': false]
  configProperties += ['suppressions.suppress': 'LineLength']
}

如果有的话,正确的祈祷是什么?

4uqofj5v

4uqofj5v1#

您的明显意图是从一个常用的Checkstyle配置开始,然后为您的项目自定义它。让我们编写一个Gradle脚本来转换Checkstyle配置。该脚本将删除LineLength模块。

import javax.xml.transform.TransformerFactory
import javax.xml.transform.stream.StreamResult
import javax.xml.transform.stream.StreamSource

def readCheckstyleConfig() {
  def xslt = '''
      <xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output
            doctype-public="-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
            doctype-system="https://checkstyle.org/dtds/configuration_1_3.dtd"/>

        <xsl:template match="node()|@*">
          <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
          </xsl:copy>
        </xsl:template>

        <xsl:template match="module[@name='LineLength']">
          <!-- Delete this module. -->
        </xsl:template>
      </xsl:transform>
      '''
  def transformer = TransformerFactory.newInstance()
      .newTransformer(new StreamSource(new StringReader(xslt)))
  def xml = resources.text.fromArchiveEntry(
      configurations.checkstyleConfig, 'google_checks.xml').asReader()
  def stringWriter = new StringWriter()
  transformer.transform(new StreamSource(xml), new StreamResult(stringWriter))
  return resources.text.fromString(stringWriter.toString())
}

checkstyle {
  toolVersion = checkstyleVersion
  config = readCheckstyleConfig()
}

以上代码只是演示了这个想法。实际上,您不会将代码复制到多个build.gradle文件中,然后尝试保持副本同步。Gradle建议使用convention plugins在多个项目之间共享构建逻辑。

相关问题