機械翻訳について

jdeprscanコマンド

名前

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つ以上のディレクトリで構成される検索パスを指定できます。 次に例を示します。

  • 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)

リリース値8を指定して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

JDK 9で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