2014-04-23 3 views
1

안녕하세요, SonarQube 4.1에 대한 사용자 정의 Java 규칙을 구현하는 방법을 찾으려고했습니다.SonarQube Java 플러그인 - 4.1 사용자 정의 규칙 예제

website에서 example plugin on github은 JavaFileScanner를 기반으로 한 ExampleCheck로 발견되었습니다.

그러나 나는 일을하는 데 몇 가지 심각한 문제가 있습니다. 현재 SonarQube 4.1에서 샘플을 얻는 데 도움이 될 수 있으면 좋겠습니다.

컴파일 및 배포는 빌드를 정확하게

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 불만에 너무 수중 음파 탐지기 - 플러그인-API 4.1.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에 심각한 문제가 있습니까? 을 업데이트하는 것이 좋습니다?

답변

2

저는이 예를 쓴 사람이고 사실 여러면에서 지저분합니다.

질문에 짧은 대답은 : 버전 4.1와 더 큰 문제는, 예를의 최신 버전을 다운로드 (전 몇 분을 수정하지 않음) 그리고 당신은 괜찮을 것 : https://github.com/SonarSource/sonar-examples/tree/master/plugins/java-custom-rules

는 무슨 일이 일어 났는지 이해하기 :

java 플러그인의 AST가 완료되지 않은 API입니다. AST를 시각화하는 좋은 방법을 제공하기 위해 예제에서 PrinterVisitor을 제공하고 노드와 연결된 행 번호를 표시하려고 했으므로 (따라서 JavaTree에 캐스트) 종속성에 대해 엉망이되어 문제가 발생했습니다 기본적으로 올바른 종속성에서 클래스를로드하지 않음), 문제는이 행을 가져 오기 위해 ASTNode 추상화를이 예제로 유출해야한다는 것이고 이것이 공개 API의 일부가 될 의도가 없다는 것입니다.

따라서 빠른 수정은 줄 번호 표시를 제거하여이 예제가 올바르게 작동하도록하는 것입니다. 더 긴 교정은이 필요를위한 제일 API 디자인을 생각하기 위하여 시간을 더 걸릴 것이다. 우리는 PrinterVisitor가 언젠가 공공 API에서 다시 돌아갈 수 있도록 할 계획입니다.

+0

안녕하세요 benzonico, 빠른 수정에 대해 감사드립니다. 내가 얻지 못한 것은 2.0 버전 (업데이트 센터를 통해 업데이트 됨) 인 소니의 플러그인 버전 이었기 때문에 약간 이상했습니다. 그리고 내가 가진 다른 문제는 플러그인 개발자를위한 문서가 부족하다는 것입니다. 이미 공개 sonarqube 릴리스 (4.2에서도 확인 했음)에서 사용할 수없는 최신 API를 사용하는 기존 규칙 (javadoc없이)의 코드 만 있습니다. 오징어 API를 사용하는 것이 더 안정되고 문서화 될 때까지 기다릴 것입니다. – dag

관련 문제