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が表示されます。
// NOSONAR 自体に警告を出力する
Track uses of "NOSONAR" comments
ルールをONにすると、
// NOSONAR
自体に警告を出力できるようになります。
サボり防止とか、使いすぎを検知する目的で使うのかと
@java.lang.SuppressWarnings に警告を出力する
Track uses of "@SuppressWarnings" annotations
ルールをONにすると
@SuppressWarnings
の使用箇所に警告を出力できるようになります。
こちらは余計なノイズがのりそうに思います。
エンタープライズ向けにきっちり使うなら、squid指定で、ignoreしたほうがいい気はします。
全ルールの警告表示したところかなりの量が出力されるので、
ルールカスタマイズも含めて、実施する形になるかと。2
[2] ルールのカスタマイズは数は多いですが、画面からプロファイル設定もできるので、それほど時間はかからないです。
以上です。
コメント