java - SonarQube Java 插件 - 4.1 的自定义规则示例

标签 java sample sonarqube

您好,我试图找到一种方法来实现 SonarQube 4.1 的自定义 java 规则。

来自website我找到了example plugin on github使用基于 JavaFileScanner 的 ExampleCheck。

但是我有几个严重的问题来让事情正常运转。 现在我希望有人至少可以帮助我让示例在 SonarQube 4.1 中工作。

编译和部署不起作用,因为它依赖于 sonar-plugin-api 4.1.1 等等,启动 SonarQube 对此的提示

ERROR [o.s.s.p.PlatformLifecycleListener]  Fail to start server
java.lang.IllegalStateException: Plugin javacustomrules needs a more recent version of SonarQube than 4.1. At least 4.1.1 is expected

将依赖项更改为 4.1 版本并让 sonarqube 启动。我可以在 QualityProfile 中选择规则并运行:

mvn sonar:sonar

但这会导致以下错误:

...
Caused by: org.sonar.squid.api.AnalysisException: SonarQube is unable to analyze file : 'C:\projects\...MyClass.java'
        at org.sonar.java.ast.AstScanner.scan(AstScanner.java:102)
        at org.sonar.java.JavaSquid.scanSources(JavaSquid.java:135)
        at org.sonar.java.JavaSquid.scan(JavaSquid.java:129)
    Caused by: java.lang.ClassCastException: org.sonar.java.model.JavaTree$CompilationUnitTreeImpl cannot be cast to org.sonar.java.model.JavaTree$CompilationUnitTreeImpl
            at org.sonar.samples.java.PrinterVisitor.scan(PrinterVisitor.java:66)
            at org.sonar.samples.java.PrinterVisitor.print(PrinterVisitor.java:34)
            at org.sonar.samples.java.ExampleCheck.scanFile(ExampleCheck.java:49)
            at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:87)
            at com.sonar.sslr.impl.ast.AstWalker.walkAndVisit(AstWalker.java:67)
            at org.sonar.java.ast.AstScanner.scan(AstScanner.java:95)
  ... 62 more

相应的代码对我来说看起来不错,因为有从 JavaTree.CompilationUnitTreeImpl 到 JavaTree 的转换。

GitHub 上没有 TestCase 的历史记录,所以我看不出可能发生了什么变化。或者 SonarQube 4.1 是否存在严重问题并且强烈建议更新?

最佳答案

我是写这个例子的人,事实上它在很多方面都很困惑。

对您问题的简短回答是:4.1 版没有大问题,获取最新版本的示例(几分钟前更正),您应该没问题:https://github.com/SonarSource/sonar-examples/tree/master/plugins/java-custom-rules

了解发生了什么:

java插件中的AST是一个不完整的API。为了提供一种很好的方式来可视化 AST,我提供了 PrinterVisitor在示例中,旨在显示与节点关联的行号(因此转换为 JavaTree ),但是我弄乱了依赖关系,这会引起您遇到的麻烦(基本上,没有从正确的依赖关系加载类),而且麻烦的是,为了得到这条线,我不得不泄漏 ASTNode抽象到这个例子中,这绝对不是为了成为公共(public) API 的一部分。

因此,这里的快速更正是删除行号的显示,以使该示例正常工作。较长的修正将需要更多的时间来考虑满足此需求的最佳 API 设计。我们计划在某个时候让 PrinterVisitor 重新出现在公共(public) API 中。

关于java - SonarQube Java 插件 - 4.1 的自定义规则示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246965/

相关文章:

java - 在单个连接中发送多个 POST 请求的 HttpUrlConnection

android - Rad Pack Seattle的所有蓝牙信标示例均失败

sonarqube - 将 Sonar MSBuild Runner 与/p :IsPackaging=True 一起使用

sonarqube - GC 开销限制超过了 5.5 版本中运行的后台任务

java - VBox(或 HBox)内的旋转对象

java - 在构造函数中制作 Set<String> 的常规副本

Android-NDK构建系统(构建hello-gl2)

python - 从一组中采样一个元素,时间复杂度为 O(1)

sonarqube - 如何在 Eclipse 中将证书添加到 SonarLint

java - 使用 for 循环填充数组时遇到问题 - java