【问题标题】:SonarQube - Import existing checkstyle xml-file into SonarQube failsSonarQube - 将现有的 checkstyle xml 文件导入 SonarQube 失败
【发布时间】:2016-02-18 11:57:09
【问题描述】:

我已经安装了 SonarQube 5.1.2 和 Checkstyle Plugin 2.3。

问题:如何导入 Checkstyle XML 配置文件?当我尝试将预安装的 FindBugs 或 Checkstyle 规则配置导出到 XML 文件中时,导出工作正常。然后我尝试用其他名称导入相同的规则,它不起作用。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<module name="Checker">
  <property name="severity" value="warning"/>
  <module name="TreeWalker">
    <module name="JavadocMethod">
      <property name="scope" value="public"/>
      <property name="suppressLoadErrors" value="true"/>
    </module>
    <module name="JavadocType">
      <property name="scope" value="public"/>
      <property name="authorFormat" value="^.../[^,]+(,\s.../[^,]+)*$"/>
    </module>
    <module name="JavadocVariable">
      <property name="scope" value="public"/>
    </module>
    <module name="JavadocStyle"/>
    <module name="ConstantName"/>
    <module name="LocalFinalVariableName">
      <property name="format" value="^[a-z_][a-zA-Z0-9]*$"/>
    </module>
    <module name="LocalVariableName">
      <property name="format" value="^[a-z_][a-zA-Z0-9]*$"/>
    </module>
    <module name="MemberName"/>
    <module name="MethodName"/>
    <module name="PackageName"/>
    <module name="ParameterName"/>
    <module name="StaticVariableName"/>
    <module name="TypeName"/>
    <module name="AvoidStarImport"/>
    <module name="IllegalImport"/>
    <module name="RedundantImport"/>
    <module name="UnusedImports"/>
    <module name="MethodLength"/>
    <module name="ParameterNumber"/>
    <module name="LineLength">
      <property name="max" value="180"/>
      <property name="tabWidth" value="4"/>
    </module>
    <module name="EmptyForIteratorPad"/>
    <module name="MethodParamPad"/>
    <module name="NoWhitespaceAfter"/>
    <module name="NoWhitespaceBefore"/>
    <module name="OperatorWrap"/>
    <module name="ParenPad"/>
    <module name="TypecastParenPad"/>
    <module name="WhitespaceAfter"/>
    <module name="WhitespaceAround">
      <property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND,WILDCARD_TYPE"/>
    </module>
    <module name="ModifierOrder"/>
    <module name="RedundantModifier">
      <property name="tokens" value="VARIABLE_DEF,ANNOTATION_FIELD_DEF"/>
    </module>
    <module name="AvoidNestedBlocks"/>
    <module name="EmptyBlock">
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>
    <module name="LeftCurly"/>
    <module name="NeedBraces"/>
    <module name="RightCurly"/>
    <module name="AvoidInlineConditionals"/>
    <module name="EmptyStatement"/>
    <module name="EqualsHashCode"/>
    <module name="HiddenField">
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>
    <module name="IllegalInstantiation"/>
    <module name="InnerAssignment">
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>
    <module name="MagicNumber">
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>
    <module name="MissingSwitchDefault"/>
    <module name="RedundantThrows">
      <property name="suppressLoadErrors" value="true"/>
    </module>
    <module name="SimplifyBooleanExpression"/>
    <module name="SimplifyBooleanReturn"/>
    <module name="DesignForExtension">
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>
    <module name="FinalClass"/>
    <module name="HideUtilityClassConstructor"/>
    <module name="InterfaceIsType"/>
    <module name="VisibilityModifier">
      <property name="severity" value="ignore"/>
      <property name="packageAllowed" value="true"/>
      <property name="protectedAllowed" value="true"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>
    <module name="ArrayTypeStyle"/>
    <module name="FinalParameters">
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>
    <module name="TodoComment"/>
    <module name="UpperEll"/>
    <module name="GenericWhitespace"/>
    <module name="MissingOverride"/>
  </module>
  <module name="JavadocPackage">
    <property name="severity" value="ignore"/>
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
  </module>
  <module name="NewlineAtEndOfFile"/>
  <module name="Translation"/>
  <module name="FileLength"/>
  <module name="FileTabCharacter">
    <property name="severity" value="ignore"/>
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
  </module>
  <module name="RegexpSingleline">
    <property name="severity" value="ignore"/>
    <property name="format" value="\s+$"/>
    <property name="message" value="Line has trailing spaces."/>
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
  </module>
  <module name="RegexpSingleline">
    <property name="format" value="^\s*@[A-Za-z]+(\([^\)]*\))?\s+[^\(].+$"/>
    <property name="message" value="Do not use inline annotations"/>
  </module>
  <module name="RegexpSingleline">
    <property name="format" value="\([^)]*@[^\s]+\s\s+.*\)"/>
    <property name="message" value="Use single space after inline annotation"/>
  </module>
</module>

我已经尝试导出现有的预安装规则集并尝试使用其他名称将其导入回来。但这会导致同样的失败。

这也是bug吗?

【问题讨论】:

  • 不清楚你所说的“用其他名字”是什么意思。
  • 为了测试sonarqube的导出导入功能是否有bug,我只是将Java Sonar方式的默认规则集(default ruleset)导出为xml文件。我尝试在相同的声纳环境中导入相同的文件。它不起作用。这真糟糕。此测试的原因是,我无法导入从 exlipse checkstyle 插件(版本 5.7.0)导出的文件 使用“其他名称”我的意思是,当您尝试导入已经存在的相同规则集时,您有给它一个新的名字。 (“声纳方式”变为例如“声纳方式 2”)非常感谢所有的更正。

标签: xml import sonarqube checkstyle rules


【解决方案1】:

您说的是导入配置文件,但显示的似乎是特定于工具的 XML 文件,而不是与 SonarQube 质量配置文件相关的文件。

您可以导出和导入两种类型的东西:

  1. SonarQube 质量配置文件 - 这些可以导入到 SonarQube 服务器以创建文件中命名的配置文件。如果该名称的配置文件已经存在,您确实会收到错误消息。
  2. 工具特定的规则集 - 对于某些语言,这些可以从配置文件中导出并在创建新配置文件时导入

这两种导入功能都不能用于更新现有的配置文件。

用于在创建 Java 配置文件时导入 Checkstyle、PMD 和 FindBugs 规则集的功能,但由于 SonarQube Java 插件已替换每个插件的大部分规则,因此该功能已被删除。

【讨论】:

  • 1.我尝试导入的这个文件是由 eclipse checkstyle 插件生成的文件。它会生成一个 xml 文件。这应该可以在 sonarqube checkstyle 插件中导入它。我可以导出它但不能导入它是没有意义的。 2. 我想我找到了解决办法。看这个链接:dist.sonarsource.com/reports/coverage/checkstyle.html
  • 1.这确实是有道理的,因为您说的是苹果(Eclipse 插件)和橘子(SonarQube 插件)。 2. 该报告显示哪些 Checkstyle 规则已被 Java 插件中的新规则替换。
  • 感谢您的帮助。现在它对我有用。但目标是用 Sonar 规则替换所有 checkstyle 规则吗?你有像 SonarLint 这样的东西吗? SonarLint1.0 不支持远程连接到 SonarQube 服务器。我读到 SonarLint 2.0 版就可以了。
  • 目标是替换所有有价值的 Checkstyle 规则。这就是为什么您找到的报告将某些规则标记为“已拒绝”。我不明白你在问什么关于 SonarLint 的问题;它是 SonarSource 产品,所以是的,我们有 SonarLint。 :)
  • 重点是,如果你在 eclipse 中使用 checkstyle,即时分析效果很好。使用 Sonarqube,我们总是必须按分析。这不酷。 SonarLint 就在那个时候作为 1.0 版存在。我尝试了一下,我不得不注意到无法连接到 Sonarqube 服务器。我们需要一个不按任何键的即时分析器。 :-)
猜你喜欢
  • 2013-07-23
  • 2017-11-19
  • 1970-01-01
  • 2016-09-14
  • 2015-08-14
  • 1970-01-01
  • 2020-03-11
  • 2016-08-29
  • 2017-07-30
相关资源
最近更新 更多