プロジェクト

全般

プロフィール

調査 #72

未完了

NetBeansのFindBugs IntegrationプラグインをSpotbugsに入れ替えできるか調査する

高橋 徹 さんがほぼ7年前に追加. 約4年前に更新.

ステータス:
フィードバック
優先度:
通常
担当者:
カテゴリ:
-
対象バージョン:
-
開始日:
2017/06/25
期日:
進捗率:

50%

予定工数:

説明

調査目的:
 Findbugsは、3.0.1リリース以降更新が滞っている。コミュニティは継続に向けて動いているが、暫定的にFindbugsをフォークしたSpotbugsを公開している。NetBeansのFindbugs Integrationプラグインに含まれるFindbugs 3.0.1を、このSpotbugsに差し替えたい。

調査結果:
 第2目標は、#72-5で達成

完了条件:
 第1目標:FindBugs Integrationのnbmファイルの中に含まれるFindBugs 3.0.0をSpotBugs 4.0.0に差し替え、ローカルインストール(非インターネット接続環境でのファイルからのインストール)を可能とする。
 第2目標:FindBugs Integrationプラグインをインストール後、インストール先のファイルをSpotBugsおよびSpotBugsが必要とするファイルに差し替える。


関連するチケット 1 (0件未完了1件完了)

関連している サポート #8: NetBeans 8でソースコード静的検証終了高橋 徹2014/03/16

操作

高橋 徹 さんがほぼ7年前に更新

  • 関連している サポート #8: NetBeans 8でソースコード静的検証 を追加

高橋 徹 さんがほぼ7年前に更新

  • ステータス新規 から 進行中 に変更
  • 担当者高橋 徹 にセット
  • 進捗率0 から 50 に変更

Spotbugs は、mavenリポジトリでビルド済みバイナリが公開されている。
http://central.maven.org/maven2/com/github/spotbugs/spotbugs/

ここから、現時点で最新の spotbugs-3.1.0-RC3.jar を取得し、MANIFEST.MFを取り出して依存ライブラリを確認した。

spotbugs-3.1.0-RC3.jar に含まれるMANIFEST.MF

Manifest-Version: 1.0
Bundle-Version: 3.1.0-RC3
Class-Path: dom4j-1.6.1.jar jaxen-1.1.6.jar asm-debug-all-6.0_ALPHA.ja
 r jsr305-3.0.1.jar jFormatString-3.0.0.jar commons-lang-2.6.jar
Main-Class: edu.umd.cs.findbugs.LaunchAppropriateUI

FindBugs Integration 1.32 のライブラリのMANIFEST.MF

現時点でインストールされる最新の FindBugs Integration のバージョン1.32の内容を確認する。
FindBugs Integration をインストールし、%APPDATA%\NetBeans\8.2\modules\org-netbeans-libs-findbugs.jar の MANIFEST.MF に記載のClass-Path属性は次のとおり。

Class-Path: ext/jFormatString.jar ext/commons-lang-2.6.jar ext/jaxen-1
 .1.6.jar ext/findbugs.jar ext/dom4j-1.6.1.jar ext/asm-debug-all-5.0.2
 .jar ext/bcel-6.0-SNAPSHOT.jar ext/jsr305.jar

Spotbugs に入れ替えるために

依存ライブラリ FindBugs Integrationには
dom4j-1.6.1.jar あり
jaxen-1.1.6.jar あり
asm-debug-all-6.0_ALPHA.jar バージョンが古い(5.0.2)
jsr305-3.0.1.jar 名前が違う(jsr305.jar) 内容違う
jFormatString-3.0.0.jar 名前が違う(jFormatString.jar)内容同じ
commons-lang-2.6.jar あり
  • FindBugs Integrationのjsr305は、中のファイルタイムスタンプがjsr305-3.0.1.jarに比べて古い
  • FindBugs IntegrationのjFormatString.jarは、中のファイルタイムスタンプが jFormatString-3.0.0.jarと一致

高橋 徹 さんがほぼ7年前に更新

org-netbeans-libs-findbugsjar のMANIFEST.MF変更

- Class-Path: ext/jFormatString.jar ext/commons-lang-2.6.jar ext/jaxen-1
-  .1.6.jar ext/findbugs.jar ext/dom4j-1.6.1.jar ext/asm-debug-all-5.0.2
-  .jar ext/bcel-6.0-SNAPSHOT.jar ext/jsr305.jar
+ Class-Path: ext/jFormatString.jar ext/commons-lang-2.6.jar ext/jaxen-1
+  .1.6.jar ext/dom4j-1.6.1.jar ext/asm-debug-all-6.0_ALPHA.jar ext/jsr3
+  05-3.0.1.jar ext/spotbugs-3.1.0-RC3.jar 

org-netbeans-libs-findbugs.jarの作成

APPDATA\NetBeans\8.2\modules\org-netbeans-libs-findbugs.jar を作業ディレクトリに解凍・展開し、上述の修正したMANIFEST.MFを使って再作成する。

D:\work> jar xf org-netbeans-libs-findbugs.jar
D:\work> jar cfm org-netbeans-libs-findbugs.jar MANIFEST.MF org

再作成しった org-netbeans-libs-findbugs.jar を、元の場所のものと入れ替える。
APPDATA\NetBeans\8.2\modules\org-netbeans-libs-findbugs.jar

新たに必要となる依存ライブラリをコピーする。
APPDATA\NetBeans\8.2\modules\ext ディレクトリの下に次をコピー

  • asm-debug-all-6.0_ALPHA.jar
  • jsr305-3.0.1.jar
  • spotbugs-3.1.0-RC3.jar

不必要なライブラリは、そのまま残しておいても、削除しても

高橋 徹 さんがほぼ7年前に更新

  • ステータス進行中 から 解決 に変更
  • 進捗率50 から 80 に変更

差し替える(追加する)JARファイル群と、Windows用の差し替えバッチファイルを次のWikiページに用意しました。

NetBeans FindBugs

高橋 徹 さんが約4年前に更新

  • 説明 を更新 (差分)
  • ステータス解決 から フィードバック に変更
  • 進捗率80 から 50 に変更

2020-03-11現在、FindBugsはバージョン3.0.1のまま停滞している。一方、SpotBugsは2020-02にバージョン4.0.0がリリースされている。

SpotBugs 4.0.0が依存するライブラリを調べる。spotbugs-4.0.0.jarのMETA-INF/MANIFEST.MFの記載

Class-Path: asm-commons-7.3.1.jar asm-util-7.3.1.jar asm-analysis-7.3.
 1.jar asm-tree-7.3.1.jar asm-7.3.1.jar bcel-6.4.1.jar jcip-annotation
 s-1.0.jar dom4j-2.1.1.jar commons-lang-2.6.jar slf4j-api-1.8.0-beta4.
 jar spotbugs-annotations.jar jaxen-1.1.6.jar Saxon-HE-9.9.1-2.jar jsr
 305-3.0.2.jar icu4j-63.1.jar log4j-slf4j18-impl-2.11.1.jar slf4j-api-
 1.8.0-alpha2.jar log4j-core-2.11.1.jar log4j-api-2.11.1.jar config/

これらは、spotbugs-4.0.0.tgzを入手すると中に含まれている。

org-netbeans-libs-findbugs.nbm の中にある関連しそうなファイルを調べる。

  • netbeans/modules/org-netbeans-libs-findbugs.jar.pack.gz
    pack200で圧縮されているので、JDKのunpack200コマンドで解凍。なお、pack200ツールはdeprecatedとなっており、JDK 14で削除予定。
    D:\work> unpack200 org-netbeans-libs-findbugs.jar.pack.gz org-netbeans-libs-findbugs.jar
    Warning: The unpack200 tool is deprecated, and is planned for removal in a future JDK release.
    D:\work>
    

unpack200で解凍したorg.netbeans-libs-findbugs.jarの中のMETA-INF/MANIFEST.MFを表示

上述MANIFEST.MFの最後にあるClass-PathをSpotBugs用に変更
org.netbeans-libs-findbugs.jar をpack200で圧縮

D:\work> pack200 org-netbeans-libs-findbugs.jar.pack.gz org-netbeans-libs-findbugs.jar
警告: pack200ツールは非推奨であり、今後のJDKリリースで削除される予定です。
D:\work>

修正したorg-netbeans-libs-findbugs.jar.pack.gzを、org-netbeans-libs-findbugs.nbm に戻します(差し替え)

org-netbeans-libs-findbugs.nbm の中のnetbeans/modules/ext の下をSpotBugs依存ライブラリに置き換えます。依存ライブラリ群は、spotbugs-4.0.0.tgzから持ってきます。

差し替えたorg-netbeans-libs-findbugs.jar.pack.gzはハッシュ値が変わってしまい、NetBeansでプラグインをインストールする途中でエラーとなるので、、、

T.B.D.

高橋 徹 さんが約4年前に更新

SpotBugsは、バージョン3.1系はFindBugsとの互換性を極力保っていたが、4.0系はAPIの変更、削除がある。
SpotBugsのJava 9+への対応は今後(動作しないDetectorがいくつかある)。

出典
https://blog.kengo-toda.jp/entry/2020/02/17/223957

他の形式にエクスポート: Atom PDF