機械翻訳について

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ツールは、JARファイルまたは非推奨のAPI要素を使用するためのクラス・ファイルのその他の集計をスキャンするJDKによって提供される静的分析ツールです。 jdeprscanツールで識別される非推奨APIは、Java SEで定義されているAPIのみです。 サード・パーティ・ライブラリで定義した非推奨APIはレポートされません。

JARファイルまたは一連のクラス・ファイルをスキャンするには、まずスキャン対象クラスが依存するクラスがすべてクラス・パスに存在することを確認する必要があります。 「jdeprscanコマンドのオプション」で説明されている--class-pathオプションを使用して、クラスパスを設定します。 通常、アプリケーションを起動する際に使用するのと同じクラス・パスを使用します。

jdeprscanによってすべての依存クラスが見つからない場合は、欠落している各クラスに対してエラー・メッセージが生成されます。 一般に、このようなエラー・メッセージの形式は次のとおりです。

error: cannot find class ...

このようなエラーが発生した場合は、依存するクラスがすべて含まれるようにクラス・パスを調整する必要があります。

jdeprscanコマンドのオプション

次のオプションを使用できます。

--class-path path

依存するクラスを解決するための検索パスを指定します。

pathには、システム固有のパス・セパレータで区切られた1つ以上のディレクトリで構成される検索パスを指定できます。 たとえば:

  • LinuxおよびmacOS:

    --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>です。これは、メソッドが実際にコンストラクタであることを意味する特別な名前です。 別の特殊な名前は<clinit>で、クラスの静的イニシャライザを示します。

他のメソッドは、メソッド名別にリストされます。 メソッド名に続いて、引数リストおよび戻り値の型が出力されます。

(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をリリース値8で実行します:

$ 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