【问题标题】:sonar 4.5.4-- Debt definition of rule is invalid exceptionsonar 4.5.4-- 债务规则定义无效异常
【发布时间】:2015-11-18 20:22:51
【问题描述】:

当我在声纳 4.5.4 服务器中部署 stylecope 插件时,我有自己定制的 2.1 版 csharp 插件,一些规则出现如下异常,但在删除这些规则后它工作正常。这个异常出现在声纳 4.5.4 中,但在声纳 4.2 和更低版本中没有遇到任何问题。我需要知道为什么会出现这个问题以及要说什么?请解释。谢谢

java.lang.IllegalArgumentException: Debt definition on rule 'stylecopcsharp:ConstFieldNamesMustBeginWithUpperCaseLetter' is invalid at org.sonar.server.rule.DeprecatedRulesDefinitionLoader.remediationFunction(DeprecatedRulesDefinitionLoader.java:135) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.rule.DeprecatedRulesDefinitionLoader.updateRuleDebtDefinitions(DeprecatedRulesDefinitionLoader.java:117) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.rule.DeprecatedRulesDefinitionLoader.complete(DeprecatedRulesDefinitionLoader.java:107) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.rule.RuleDefinitionsLoader.load(RuleDefinitionsLoader.java:53) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.rule.RegisterRules.start(RegisterRules.java:102) ~[sonar-server-4.5.4.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_55] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_55] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_55] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_55] at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.invokeMethod(ReflectionLifecycleStrategy.java:110) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.start(ReflectionLifecycleStrategy.java:89) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.behaviors.Stored.start(Stored.java:110) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1015) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1008) ~[picocontainer-2.14.3.jar:na] at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:766) ~[picocontainer-2.14.3.jar:na] at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) ~[sonar-plugin-api-4.5.4.jar:na] at org.sonar.server.platform.ServerComponents$1.doPrivileged(ServerComponents.java:590) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.user.DoPrivileged.execute(DoPrivileged.java:43) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.platform.ServerComponents.executeStartupTasks(ServerComponents.java:586) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.platform.Platform.executeStartupTasks(Platform.java:126) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.platform.Platform.startLevel34Containers(Platform.java:122) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.platform.Platform.doStart(Platform.java:81) ~[sonar-server-4.5.4.jar:na] at org.sonar.server.platform.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:43) ~[sonar-server-4.5.4.jar:na] at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973) [tomcat-embed-core-7.0.54.jar:7.0.54] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467) [tomcat-embed-core-7.0.54.jar:7.0.54] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-7.0.54.jar:7.0.54] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) [tomcat-embed-core-7.0.54.jar:7.0.54] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) [tomcat-embed-core-7.0.54.jar:7.0.54] at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.7.0_55] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.7.0_55] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.7.0_55] at java.lang.Thread.run(Unknown Source) [na:1.7.0_55]

【问题讨论】:

  • 你没有提到你的插件版本。您可以检查以确保您使用的是最新版本吗?
  • 我正在使用插件版本 2.1。实际上我需要为 sonar-dotnet-fxcop 插件使用最新的插件,但我无法找到支持声纳服务器 4.5.4.@G 的最新声纳 fxcop。 Ann - SonarSource 团队
  • 仅供参考 @chethan sonarqube 标签就足够了(不需要 sonar-runner、sonarqube-5.0 等)。但是,最好还包括c#stylecop

标签: sonarqube sonar-runner sonarqube-4.5


【解决方案1】:

.NET 和 C# 插件 2.1 版与较新版本的 SonarQube(包括 4.5.4)不兼容。

您真的应该考虑升级到最新的 C# 插件,并使用与 Microsoft 合作开发的 MSBuild SonarQube Runner 来分析所有 .NET 项目:它极大地改善了体验,提供了更好的分析结果,并且更易于使用。

请参阅http://redirect.sonarsource.com/plugins/csharp.html 以开始使用。

以下信息仅供参考,可让您继续使用不受支持且已弃用的 C# 插件版本(这很糟糕,请三思而后行:p):

我看到您创建了自己的 StyleCop 插件,密钥为 stylecopcsharp:您应该为每个规则定义有效的 SQALE 补救成本 - 否则 SonarQube 将拒绝启动。

最简单的方法实际上是删除所有 SQALE 补救成本信息。现在,如果您想保留 SQALE,可以查看堆栈跟踪并了解 SonarQube 的验证是如何工作的:DeprecatedRulesDefinitionLoader.java#L135

在 SonarQube 4.5.4 中使用 .NET 和 C# 可能存在更多障碍,因此在采取这种方式之前请三思。

【讨论】:

  • 嗨 Dinesh 非常感谢。还有一个问题。我需要使用 sonar dotnet fxcop 和 sonar dotnet stylecop 插件,因为我需要来自 fxcop 和 stylecop 的许多规则以及宪兵(优先级较低)。如果我升级插件版本,我可以获得此规则插件。
  • @chethan FxCop 支持内置在 C# 4.1 插件中,并且有一个单独的 SonarQube StyleCop 插件版本 1.1 - docs.sonarqube.org/x/lgAW - 但是自 C# 3.x 及其后,Gendarme 的支持已被删除支持的将不会被添加回来。
猜你喜欢
  • 2015-06-15
  • 1970-01-01
  • 2016-02-22
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 2017-09-07
  • 1970-01-01
相关资源
最近更新 更多