Здравствуйте, я пытался найти способ реализовать пользовательское java-правило для SonarQube 4.1.
На веб-сайте я нашел пример плагина на github с помощью SampleCheck на основе JavaFileScanner.
Однако у меня есть несколько серьезных проблем, чтобы заставить все работать. На данный момент я надеюсь, что, по крайней мере, поможет мне получить образец для работы в 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.
Не было истории TestCase на GitHub, поэтому я не вижу, что могло измениться. Или существуют серьезные проблемы с SonarQube 4.1, и настоятельно рекомендуется обновлять их?
Я тот, кто написал этот пример, и на самом деле он грязный во многих отношениях.
Короткий ответ на ваш вопрос: никаких серьезных проблем с версией 4.1, получить последнюю версию примера (исправлено несколько минут назад), и вы должны быть в порядке: https://github.com/SonarSource/sonar-examples/tree/master/плагины/ява-таможенно-правила
Чтобы понять, что происходит:
AST в java-плагине - это API, который не является полным. Чтобы обеспечить хороший способ визуализации AST, я предоставил PrinterVisitor
в этом примере и PrinterVisitor
целью отображать номера строк, связанные с узлами (отсюда преобразование в JavaTree
), однако я перепутал с зависимостью, и это повышает проблему, с которой вы столкнулись ( в основном, не загружая класс из правильной зависимости), кроме того, проблема в том, что для того, чтобы получить эту строку, мне пришлось ASTNode
абстракцию ASTNode
в этот пример, и это определенно не предназначено для участия в публичном API.
Поэтому быстрая коррекция здесь заключалась в том, чтобы удалить это отображение номера строки, чтобы этот пример работал правильно. Более длинная коррекция займет больше времени, чтобы подумать о лучшем дизайне API для этой потребности. Мы планируем, что PrinterVisitor вернется в открытый API в определенный момент времени.