Плагин SonarQube Java - пример пользовательского правила с 4.1

1

Здравствуйте, я пытался найти способ реализовать пользовательское 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, и настоятельно рекомендуется обновлять их?

Теги:
sonarqube
sample

1 ответ

2
Лучший ответ

Я тот, кто написал этот пример, и на самом деле он грязный во многих отношениях.

Короткий ответ на ваш вопрос: никаких серьезных проблем с версией 4.1, получить последнюю версию примера (исправлено несколько минут назад), и вы должны быть в порядке: https://github.com/SonarSource/sonar-examples/tree/master/плагины/ява-таможенно-правила

Чтобы понять, что происходит:

AST в java-плагине - это API, который не является полным. Чтобы обеспечить хороший способ визуализации AST, я предоставил PrinterVisitor в этом примере и PrinterVisitor целью отображать номера строк, связанные с узлами (отсюда преобразование в JavaTree), однако я перепутал с зависимостью, и это повышает проблему, с которой вы столкнулись ( в основном, не загружая класс из правильной зависимости), кроме того, проблема в том, что для того, чтобы получить эту строку, мне пришлось ASTNode абстракцию ASTNode в этот пример, и это определенно не предназначено для участия в публичном API.

Поэтому быстрая коррекция здесь заключалась в том, чтобы удалить это отображение номера строки, чтобы этот пример работал правильно. Более длинная коррекция займет больше времени, чтобы подумать о лучшем дизайне API для этой потребности. Мы планируем, что PrinterVisitor вернется в открытый API в определенный момент времени.

  • 0
    Привет benzonico, спасибо за быстрое решение. То, что я не получил, было то, что мои версии плагинов Sonar, где 2.0 (обновлены через центр обновления), так что это было немного странно. И другой проблемой, с которой я столкнулся, было отсутствие документации для разработчиков плагинов. Существует только код существующих правил (без какого-либо javadoc), который уже использует более новый API, недоступный в публичных выпусках sonarqube (также проверял с 4.2). Думаю, я подожду с использованием squid api, пока он не станет более стабильным и лучше документированным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню