簡體   English   中英

SonarQube Java插件-4.1的自定義規則示例

[英]SonarQube Java plugin - custom rule example with 4.1

您好,我試圖找到一種方法來實現SonarQube 4.1的自定義Java規則。

網站上,在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版本,然后開始聲納。 我可以在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/插件/ Java的定制規則

要了解發生了什么:

Java插件中的AST是不完整的API。 為了提供一種可視化AST的好方法,我在示例中提供了PrinterVisitor並打算顯示與節點關聯的行號(因此將其JavaTree轉換為JavaTree ),但是我搞砸了依賴性,這給您帶來了麻煩(基本上,不是從正確的依賴項加載類),而且麻煩的是,為了獲得這行代碼,我不得不將ASTNode抽象泄漏到此示例中,並且這絕對不打算成為公共API的一部分。

因此,此處的快速糾正是刪除此行號顯示,以使此示例正常運行。 更長時間的校正將花費更多時間來考慮最佳API設計以滿足這一需求。 我們計划在某個時候使PrinterVisitor回歸公共API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM