jdeprscan
ツールは、非推奨のAPI要素の使用についてjarファイル(またはクラス・ファイルの他の集合)をスキャンする静的分析ツールとして使用します。
形式
jdeprscan [ options ]{dir|jar|class}
options
「jdeprscanコマンドのオプション」を参照してください。
dir|jar|class
jdeprscan
コマンドは、非推奨APIの使用について各引数をスキャンします。引数には次のものがあります。
dir
: ディレクトリ
jar
: JARファイル
class
: クラス名またはクラス・ファイル
クラス名では、ドット(.
)をセパレータとして使用する必要があります。例:
java.lang.Thread
ネストされたクラスには、ドル記号$
をセパレータとして使用する必要があります。例:
java.lang.Thread$State
クラス・ファイルも指定できます。例:
build/classes/java/lang/Thread$State.class
説明
jdeprscan
ツールは、非推奨のAPI要素の使用についてJARファイルまたはクラス・ファイルの他の集合をスキャンする、JDKで提供される静的分析ツールです。jdeprscan
ツールで識別される非推奨APIは、Java SEで定義したAPIのみです。サード・パーティ・ライブラリで定義した非推奨APIはレポートされません。
JARファイルまたは一連のクラス・ファイルをスキャンするには、まずスキャン対象クラスが依存するクラスがすべてクラス・パスに存在することを確認する必要があります。「jdeprscanコマンドのオプション」の説明に従って--class-path
オプションを使用し、クラス・パスを設定します。通常、アプリケーションを起動する際に使用するのと同じクラス・パスを使用します。
jdeprscan
では、依存するクラスの一部を検出できない場合、欠落しているクラスごとにエラー・メッセージが生成されます。一般に、このようなエラー・メッセージの形式は次のとおりです。
error: cannot find class ...
このようなエラーが発生した場合は、依存するクラスがすべて含まれるようにクラス・パスを調整する必要があります。
jdeprscanコマンドのオプション
次のオプションを使用できます。
--class-path PATH
依存するクラスを解決するための検索パスを指定します。
PATH
には、システム固有のパス・セパレータで区切られた1つ以上のディレクトリで構成される検索パスを指定できます。例:
Oracle Solaris、LinuxおよびOS X:
--class-path /some/directory:/another/different/dir
注意:
Windowsでは、コロン(:
)のかわりに、セミコロン(;
)をセパレータとして使用します。
Windows:
--class-path \some\directory;\another\different\dir
--for-removal
スキャンまたはリストの対象を削除予定の非推奨であるAPIに制限します。リリース値6、7または8と一緒に使用できません。
--full-version
ツールのフル・バージョン文字列を出力します。
--help
または—h
ヘルプ・メッセージをフル出力します。
--list
または—l
一連の非推奨APIを出力します。スキャンは実行されないため、ディレクトリ、jarまたはクラスの引数を指定する必要はありません。
--release 6|7|8|9
スキャン対象の一連の非推奨APIを提供しているJava SEリリースを指定します。
--verbose
または—v
処理中の追加メッセージ出力を有効にします。
--version
簡略化されたツールのバージョン文字列を出力します。
jdeprscanの出力例
このライブラリのJARファイルは、commons-math3-3.6.1.jar
のような名前が付けられます。非推奨APIの使用についてこのJARファイルをスキャンするには、次のコマンドを実行します。
jdeprscan commons-math3-3.6.1.jar
このコマンドは数行の出力を生成します。たとえば、1行の出力は次のようになります。
class org/apache/commons/math3/util/MathUtils uses deprecated method java/lang/Double::<init>(D)V
注意:
JVMS 4.2.1で説明されているように、スラッシュ区切りのバイナリ名を使用してクラス名を指定します。これは、クラス・ファイルで内部的に使用される形式です。
ここで使用される非推奨APIは、java.lang.Double
クラスのメソッドです。
非推奨メソッドの名前は<init>
で、メソッドが実際にはコンストラクタであることを示す特殊な名前です。もう1つの特殊な名前は<clinit>
で、これはクラスのstatic初期化子を示します。
他のメソッドは、メソッド名別にリストされます。メソッド名に続いて、引数リストおよび戻り値の型が出力されます。
(D)V
これは、1つのdouble値(プリミティブ)を取り、voidを返すことを示します。引数および戻り値の型は暗号化してもかまいません。たとえば、出力の別の行は次のようになります。
class org/apache/commons/math3/util/Precision uses deprecated method java/math/BigDecimal::setScale(II)Ljava/math/BigDecimal;
出力のこの行では、非推奨メソッドはクラスjava.math.BigDecimal
にあり、メソッドはsetScale()
です。この場合、(II)
は、2つのint
引数を取ることを意味します。カッコの後のLjava/math/BigDecimal;
は、java.math.BigDecimal
への参照を返すことを示します。
バージョン固有にできるjdeprscanによる分析
過去3つのJDKリリースと関してjdeprscan
を使用できます。たとえば、JDK 9を実行している場合は、JDK 8、7および6をチェックできます。
public class Deprecations { SecurityManager sm = new RMISecurityManager(); // deprecated in 8 Boolean b2 = new Boolean(true); // deprecated in 9 }完全なクラスは、JDK 7では警告なしにコンパイルします。
JDK 9のシステムでjdeprscan
を実行すると、次のように表示されます。
$ jdeprscan --class-path classes --release 7 example.Deprecations
(no output)
jdeprscan
を実行します。$ jdeprscan --class-path classes --release 8 example.Deprecations
class example/Deprecations uses type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated
jdeprscan
を実行します。$ jdeprscan --class-path classes example.Deprecations
class example/Deprecations uses type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method java/lang/Boolean <init> (Z)V deprecated