gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:55:43 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com