您好,我试图找到一种方法来实现 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/