SonarQube提供了獨立的log服務,命令行啟動時輸出的是sonar.log的內(nèi)容。上述Netty4Transport exception caught on transport layer遠程連接關閉的問題log屬于es.log(elastic search)的部分。
而由于自定義規(guī)則的plugin導致的問題會在ce.log(Compute Engine)里有具體的提示(但這個內(nèi)容居然不在命令行輸出,導致一直對上面的遠程連接失敗摸不著頭腦)?;緯蓄愃啤?/p>
org.sonar.updatecenter.common.exception.IncompatiblePluginVersionException: The plugin 'java' is in version 5.10.1.16922 whereas the plugin 'javacustom' requires a least a version 6.3.0.21585.
猜測沒錯,屬于兼容性問題。關鍵的兩個版本值——
-
sonar.version的值為plugin支持的SonarQube最低版本(目前8.0以上對應的LTS版本為7.9;目前看7.6根7.7還是兼容的)。最新的兼容矩陣在7.9以下版本里沒有對應的說明。 -
sonarjava.version對應plugin支持的版本,需要跟使用的SonarQube中安裝的版本一致,管理員登錄后,可以在admin/marketplace?filter=installed位置查看SonarJava的版本。
根據(jù)pom.xml的git log對其他的依賴進行對應的修改。
# current
<sonar.version>8.2.0.32929</sonar.version>
<sonarjava.version>6.3.0.21585</sonarjava.version>
# modify
<sonar.version>7.7</sonar.version>
<sonarjava.version>5.10.1.16922</sonarjava.version>
回滾到上述版本后,目前的測試方法都失效了。——這是因為org.sonar.java.checks.verifier.JavaCheckVerifier的 public static CheckVerifier newVerifier()方法在2020/3/17加入的。SONARJAVA-3315 Unify CheckVerifiers accross the plugin (#2871)e7f1493fa8572fa88ed528be37fc8debabc5e671
此時本地再執(zhí)行單元測試時,會報錯——
The rule 'f.newTuple20(Object, Object)' has already been defined somewhere in the grammar.
這兩個地方都討論了這個問題:
本地測試無法正常運行(環(huán)境改的比較多了),但不影響打包操作。mvn clean install可以正常生成jar包。
放到對應的位置,重啟SonarQube,可以看到這個自定義的plugin——

