Вопрос по sonarqube, java, findbugs, jenkins – Отключение сонара для определенного кода

116

Можно ли отключить сонар (www.sonarsource.org) измерения для конкретных блоков кода, которые не нужно измерять?

Примером является «Сохранение трассировки стека». предупреждение, которое выводит Findbugs. Покидая сервер, я вполне мог бы хотеть передать сообщение обратно клиенту, не считая фактическое исключение, которое я только что перехватил, если это исключение неизвестно клиенту (потому что у клиента нет JAR, в котором это исключение содержалось например).

Ваш Ответ

5   ответов
59

Я рекомендую вам попытаться подавить определенные предупреждения с помощью@SuppressWarnings("squid:S2078").

Для подавления нескольких предупреждений вы можете сделать это следующим образом@SuppressWarnings({"squid:S2078", "squid:S2076"})

Также есть//NOSONAR комментарий, который говорит SonarQube игнорировать все ошибки для конкретной строки.

Наконец, если у вас есть соответствующие права для пользовательского интерфейса, вы можете выдать флаг как ложное срабатывание непосредственно из интерфейса.

Причина, по которой я рекомендую подавлять конкретные предупреждения, состоит в том, что лучше блокировать конкретную проблему, а не использовать//NOSONAR и рискуйте проблемой сонара, случайно попавшей в ваш код.

Вы можете прочитать больше об этом вЧасто задаваемые вопросы

Примечание: G & # xE1; bor Bakos указывает на старый FAQ, который сейчас 404-й. Это первый результат Google для меня, поэтому я хочу помочь кому-то еще, кто может иметь тот же вопрос

Изменить: 30.06.16 SonarQube теперь называется SonarLint

В случае, если вам интересно, как найти номер кальмара. Просто нажмите на сообщение сонара (напр.Remove this method to simply inherit it.) и проблема сонара будет расширяться.

Внизу слева будет номер кальмара (например,squid:S1185 Ремонтопригодность & gt; Понятность)

Так что вы можете подавить его@SuppressWarnings("squid:S1185")

Другая проблема, связанная с маркировкой его как ложного срабатывания на интерфейсе, состоит в том, что если по какой-либо причине проект будет удален и добавлен снова, все установленные вами флаги исчезнут.
Спасибо за подсказку к ингному предупреждению о нескольких сонарных кубах
58

ЭтоЧасто задаваемые вопросы, Вы можете положить//NOSONAR на линии, вызывающей предупреждение. Я предпочитаю использовать механизм FindBugs, который заключается в добавлении аннотации @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
Согласовано. Однако я не уверен, правильно ли интерпретирует сонар@SuppressFBWarnings (добавлено, чтобы избежать столкновений сjava.lang.SuppressWarnings), а также игнорирует это.
AFAIK, Sonar использует FindBugs. Поэтому, если FindBugs обрабатывает эти аннотации, я не понимаю, почему они не будут работать при запуске FindBugs через Sonar. В любом случае, тестирование не должно быть трудным.
Ссылка на FAQ устарела. Вот новыйFAQ
Не могли бы вы предоставить другую ссылку на FAQ по SonarQube? Я вижу форму входа вместо FAQ
2

Используйте // NOSONAR в строке, где вы получаете предупреждение, если это то, с чем вы не можете помочь своему коду. Оно работает!

168

Вы можете аннотировать класс или метод с SuppressWarnings

@java.lang.SuppressWarnings("squid:S00112")

squid:S00112 в этом случае - идентификатор проблемы сонара. Вы можете найти этот идентификатор в пользовательском интерфейсе сонара. Перейти к выпускам Drilldown. Найдите проблему, о которой вы хотите запретить предупреждения. В красном поле проблемы в вашем коде есть ссылка на правило с определением данной проблемы. Как только вы нажмете, что вы увидите идентификатор в верхней части страницы.

Проблема в том, что Eclipse отображает предупреждениеUnsupported @SuppressWarnings("squid:S00112"), Вы можете настроить Eclipse, чтобы игнорировать это, но затем опечатку, такую как в@SuppressWarnings("uncheckedd") не будет обнаружен
Я могу подтвердить, что это также работает с определенным идентификатором правила FindBugs, например,@SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
3

Я не смог найти номер кальмара в сонар 5.6, с этой аннотацией также работает:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
squid предназначен для базы данных Java Sonar-sourced (SonarAnalyzer Java).pmd а такжеcheckstyle находятся в других хранилищах правил.

Похожие вопросы