sonar如何添加自定義JAVA規則

參考javascript

一、https://docs.sonarqube.org/display/DEV/Adding+Coding+Rulesphp

二、https://docs.sonarqube.org/display/DEV/Adding+Coding+Rules+using+Javajava

三、https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101git

有兩種方式能夠擴展代碼規則:可是Java只支持方式1github

一、Writing coding rules using Java via a SonarQube pluginweb

二、Adding XPath rules directly through the SonarQube web interfacemaven

 

Writing coding rules in Java is a six-step process:ide

  • Create a SonarQube plugin.
  • Put a dependency on the API of the language plugin for which you are writing coding rules.
  • Create as many custom rules as required
  • Generate the SonarQube plugin (jar file)
  • Place this jar file in the SONARQUBE_HOME/extensions/plugins directory
  • Restart SonarQube server

下面詳述這個過程:函數

一、把項目拉到本地ui

git clone git@github.com:shengulong/sonar-custom-rules-examples.git

二、裏面有cobol/java/javascript/php/rpg的自定義規則,咱們只關注java的

三、使用intellij idea打開項目java-custom-rules(github上,我已經調試經過)。這是一個maven項目的模板。

四、修改下pom文件:sonar的版本以及對應的java插件版本,這樣sonar6.0以上版本均可以用這個插件

 1 <properties>
 2         <!--<sonar.version>6.3</sonar.version>-->
 3         <sonar.version>6.0</sonar.version>
 4         <!-- this 6.3 is only required to be compliant with SonarLint and it is required
 5             even if you just want to be compliant with SonarQube 5.6 -->
 6         <!--<java.plugin.version>4.7.1.9272</java.plugin.version>-->
 7         <java.plugin.version>4.5.0.8398</java.plugin.version>
 8         <sslr.version>1.21</sslr.version>
 9         <gson.version>2.6.2</gson.version>
10 </properties>

五、修改下文件,由於最初下載的報編譯錯誤

 
a、註釋掉//import org.sonar.plugins.java.Java;
b、修改函數,主要修改爲下文的java字段,由於咱們編輯的java規則插件
 1 @Override
 2   public void define(Context context) {
 3     NewRepository repository = context
 4       .createRepository(REPOSITORY_KEY, "java")
 5       .setName("MyCompany Custom Repository");
 6 
 7     List<Class> checks = RulesList.getChecks();
 8     new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(checks, Class.class));
 9 
10     for (Class ruleClass : checks) {
11       newRule(ruleClass, repository);
12     }
13     repository.done();
14   }

六、其餘修改參照github代碼提交記錄,而後按照https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101的步驟操做便可,來張最終效果圖:

相關文章
相關標籤/搜索