名前
先住民族 - 制限されたメソッド・コールやnativeメソッド宣言などのネイティブ機能の使用について1つ以上のjarファイルをスキャンする静的分析ツール。
シノプシス
jnativescan [options]
- options
- 「jnativescanコマンドのオプション」を参照
説明
jnativeツールは、制限されたメソッド・コールやnativeメソッド宣言などのネイティブ機能の使用についてJARファイルをスキャンする、JDKによって提供される静的分析ツールです。
jnativescanは、ランタイム・クラス・パスとモジュール・パス構成、ルート・モジュールのセットおよびターゲット・リリースを受け入れます。 クラス・パスおよびモジュール・パスでjarをスキャンし、--print-native-accessフラグが指定されている場合は、そのクラスおよびメソッドをコールするツリーまたはモジュール名のリストとして、ネイティブ機能の使用をレポートします。
jnativescanコマンドのオプション
次のオプションを使用できます。
--class-pathpath- スキャンするjarファイルを指すパスのリストを指定するために使用します。
このリストで指定されたすべてのjarファイルがスキャンされます。 jarファイルのマニフェストにClass-Path属性が含まれている場合、そこにリストされているjarファイルもスキャンされます。 Class-Pathマニフェスト属性にリストされている、見つからないJARファイルは無視されます。 見つかったjarファイルはすべて、名前のないモジュールに属しているかのように扱われます。
--module-pathpath-
jarファイルまたはjarファイルを含むディレクトリを指すパスのリストを指定するために使用します。このファイルは、スキャンする必要があるモジュールの検索にツールで使用できます。 スキャンされるjarファイルのリストは、
--add-modulesオプションによって異なります。--class-pathオプションと--module-pathオプションの両方の場合、pathは、システム固有のパス・セパレータで区切られた1つ以上のjarファイルで構成される検索パスである必要があります。 たとえば:LinuxおよびmacOS:
--class-path /some/foo.jar:/another/different/bar.jar
ノート:
Windowsでは、コロン(
:)のかわりにセパレータとしてセミコロン(;)を使用します。Windows:
--class-path C:\some\foo.jar;C:\another\different\bar.jar
--add-modules「モジュール [,module...]」-
スキャンするルート・モジュールを示すモジュール名のカンマ区切りリストを指定するために使用します。 すべてのルート・モジュールと、それらが依存するすべてのモジュールがスキャンされます。 これには、モジュールの
module-infoファイルのusesディレクティブで指定されたサービス実装への依存性が含まれます。 そのようなサービスの実装を提供するモジュール・パス上にあるすべてのモジュールもスキャンされます。 --releaseversion-
スキャンする制限付きメソッドのセットを指定するJava SEリリースを指定するために使用します。 複数リリースjarファイルの場合、このオプションは、jarからロードするクラス・ファイルのバージョンも示します。 このオプションは、アプリケーションの実行が最終的に意図されるランタイムのバージョンに設定する必要があります。 このフラグを省略すると、
jnativescanのバージョンがリリース・バージョンとして使用されます。これは、ツールが属しているJDKのバージョンと同じです。 --print-native-access- デフォルトのツリー構造ではなく、ネイティブ機能を使用するモジュール名のコンマ区切りリストを出力します。
--helpまたは-h- 完全なヘルプ・メッセージを表示します。
--version- ツールの短縮バージョン文字列を出力します。
jnativescanの使用例
jnativescanは、クラス・パス、モジュール・パス、ルート・モジュールのセットおよびターゲット・リリース・バージョンの形式でランタイム構成を受け入れます。 クラス・パスの場合、ツールは、Class-Pathマニフェスト属性で再帰的に検出されたものを含め、すべてのjarファイルをスキャンします。 モジュール・パスの場合、このツールは、--add-modulesで指定されたすべてのルート・モジュールおよびルート・モジュールの(transitive)依存性(スキャンされたモジュールで使用されるサービス実装を含むモジュールを含む)をスキャンします。
デフォルトでは、ツリーのような構造でネイティブ機能を使用するjar、classおよびmethodが出力されます。 次に出力の例を示します。
$ jnativescan --class-path app.jar
app.jar (ALL-UNNAMED):
foo.Main:
foo.Main::main(String[])void references restricted methods:
java.lang.foreign.MemorySegment::reinterpret(long)MemorySegment
foo.Main::nativeMethod()void is a native method declaration
app.jar (ALL-UNNAMED)はjarファイルへのパスで、モジュール名はカッコで囲みます。 この場合、jarファイルはクラス・パスに表示されるため、ALL-UNNAMEDは名前のないモジュールを示すために出力されます。 出力の2行目foo.Mainは、ネイティブ機能を使用するメソッドがfoo.Mainクラスで見つかったことを示します。 次の行:
foo.Main::main(String[])void references restricted methods:
foo.Mainクラスのmain(String[])メソッドが、次の行にリストされている制限付きメソッドを参照することを示します:
java.lang.foreign.MemorySegment::reinterpret(long)MemorySegment
最後に、テキスト:
foo.Main::nativeMethod()void is a native method declaration
foo.Mainクラスに、nativeMethodという名前のnativeメソッドの宣言が含まれていることを示します。
--print-native-accessをサンプル・コマンドラインに追加すると、かわりにネイティブ機能へのアクセスを含むモジュールの名前のリストが表示されます:
$ jnativescan --class-path app.jar --print-native-access
ALL-UNNAMED
この場合、出力はALL-UNNAMEDのみで構成され、これはクラス・パス上のjarファイル(つまり、名前のないモジュール内)にネイティブ機能へのアクセスが含まれていることを示します。