【问题标题】:SonarQube Java plugin - custom rule example with 4.1SonarQube Java 插件 - 4.1 的自定义规则示例
【发布时间】:2014-06-26 01:15:56
【问题描述】:

您好,我正在尝试为 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

但这以以下错误结束:

... 原因:org.sonar.squid.api.AnalysisException:SonarQube 无法分析文件:'C:\projects\...MyClass.java' 在 org.sonar.java.ast.AstScanner.scan(AstScanner.java:102) 在 org.sonar.java.JavaSquid.scanSources(JavaSquid.java:135) 在 org.sonar.java.JavaSquid.scan(JavaSquid.java:129) 引起:java.lang.ClassCastException:org.sonar.java.model.JavaTree$CompilationUnitTreeImpl 不能转换为 org.sonar.java.model.JavaTree$CompilationUnitTreeImpl 在 org.sonar.samples.java.PrinterVisitor.scan(PrinterVisitor.java:66) 在 org.sonar.samples.java.PrinterVisitor.print(PrinterVisitor.java:34) 在 org.sonar.samples.java.ExampleCheck.scanFile(ExampleCheck.java:49) 在 org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:87) 在 com.sonar.sslr.impl.ast.AstWalker.walkAndVisit(AstWalker.java:67) 在 org.sonar.java.ast.AstScanner.scan(AstScanner.java:95) ... 62 更多

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

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

【问题讨论】:

    标签: java sample sonarqube


    【解决方案1】:

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

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

    要了解发生了什么:

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

    因此这里的快速更正是删除此行号显示以使此示例正常工作。更长的修正将需要更多时间来考虑满足此需求的最佳 API 设计。我们计划在某个时间点让 PrinterVisitor 回到公共 API 中。

    【讨论】:

    • 您好,benzonico,感谢您的快速修复。我没有得到的是我的 Sonar 插件版本是 2.0 的(通过更新中心更新),所以这有点奇怪。我遇到的另一个问题是插件开发人员缺乏文档。只有现有规则的代码(没有任何 javadoc)已经使用了公共 sonarqube 版本中不可用的较新 api(也检查了 4.2)。我想我会等待使用 squid api,直到它更稳定并且有更好的文档记录。
    猜你喜欢
    • 2014-04-22
    • 2014-07-19
    • 1970-01-01
    • 2016-12-22
    • 2016-11-28
    • 2016-02-12
    • 2015-03-12
    • 2015-08-28
    • 2018-03-13
    相关资源
    最近更新 更多