SonarQube 上で 静的解析結果が見れるようにはなりましたが、
パッケージ単位で、プログラム内のある特定の警告だけOFFにしたいケースがありましたので、
そのやり方を記載します。


環境情報

  • OS Version

sw_vers    
----------------------------
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G1108
----------------------------

  • SonarQube の Version 6.1

パッケージ単位で警告をOFFにする

JPAを使っていますが、EntityクラスをNetBeansの機能で自動生成しています。
このEntityクラスで大量の警告が出ていたので、Entityクラスのあるパッケージは、
思いきって警告をOFFにします。

以下の記事が参考になりました。

pom.xml に sonar.exclusions追加する。

除外対象のクラスが存在するプロジェクトのpom.xml に以下の記載を追加して、
mvn sonar:sonar再度実行したところ、対象のクラスが除外されました。1
[1] ファイルパスはsrc/mainから記載しています。プロジェクトルートからの相対パスになります。

    <properties>
        ....
        <jpa.ddl-generation>none</jpa.ddl-generation>
        <sonar.exclusions>src/main/java/xyz/monotalk/models/rdb/entity/*.java</sonar.exclusions>
    </properties>


プログラム上の特定の警告をOFFにする

以下の記事が参考になりました。
@java.lang.SuppressWarnings("squid:S00100")要領で、@java.lang.SuppressWarnings使うやり方と、
// NOSONAR使うやり方があります。

java - Turning Sonar off for certain code - Stack Overflow

@java.lang.SuppressWarnings を使う

以下のように記載できます。
S00100 は、メソッド名が命名規則に反している時に出力される警告になります。

    @java.lang.SuppressWarnings("squid:S00100")
    protected <E extends Object> E _new(Class<E> clazz) {
        return injector.getInstance(clazz);
    }

// NOSONAR を使う

以下のように記載できます。

    /**
     * Constructor
     */
    public EchonestAPIClient() {
        // Set Up
        String API_KEY = "XXXXXXXXXXXXXX"; // NOSONAR
        en = new EchoNestAPI(API_KEY);

        cmd = new Commander("EchoNestAPI");
        Params stdParams = new Params();
        stdParams.add("api_key", API_KEY);
        cmd.setStandardParams(stdParams);
    }

@java.lang.SuppressWarnings と // NOSONAR の違いについて

1行に複数の警告がある場合、// NOSONAR記述すると、
複数の警告、すべてがOFFになります。
@java.lang.SuppressWarningsで複数警告をOFFにする場合は、カンマ区切りで、
@java.lang.SuppressWarnings({"squid:S2078", "squid:S2076"})
記載が必要なようです。

@java.lang.SuppressWarningsのほうが明示的にOFFにしているとも言えます。
個人的には、squidを調べるのが面倒であると感じるので、// NOSONAR使おうかと
考えております。

squidの特定方法

コード上で、警告表示されている箇所のメニューリンクをクリックすると、
警告の説明ウィンドウが表示されますが、ウィンドウの右上にsquidが表示されます。

squid window

// NOSONAR 自体に警告を出力する

Track uses of "NOSONAR" comments ルールをONにすると、
// NOSONAR 自体に警告を出力できるようになります。
サボり防止とか、使いすぎを検知する目的で使うのかと

NOSONAR rule

@java.lang.SuppressWarnings に警告を出力する

Track uses of "@SuppressWarnings" annotations ルールをONにすると
@SuppressWarnings使用箇所に警告を出力できるようになります。
こちらは余計なノイズがのりそうに思います。

Track uses of @SuppressWarnings annotations

エンタープライズ向けにきっちり使うなら、squid指定で、ignoreしたほうがいい気はします。
全ルールの警告表示したところかなりの量が出力されるので、
ルールカスタマイズも含めて、実施する形になるかと。2
[2] ルールのカスタマイズは数は多いですが、画面からプロファイル設定もできるので、それほど時間はかからないです。
以上です。

コメント