名前
先住民族 - 制限されたメソッド・コールやnative
メソッド宣言などのネイティブ機能の使用について1つ以上のjarファイルをスキャンする静的分析ツール。
シノプシス
jnativescan
[options]
- options
- 「jnativescanコマンドのオプション」を参照
説明
jnative
ツールは、制限されたメソッド・コールやnative
メソッド宣言などのネイティブ機能の使用についてJARファイルをスキャンする、JDKによって提供される静的分析ツールです。
jnativescan
は、ランタイム・クラス・パスとモジュール・パス構成、ルート・モジュールのセットおよびターゲット・リリースを受け入れます。 クラス・パスおよびモジュール・パスでjarをスキャンし、--print-native-access
フラグが指定されている場合は、そのクラスおよびメソッドをコールするツリーまたはモジュール名のリストとして、ネイティブ機能の使用をレポートします。
jnativescanコマンドのオプション
次のオプションを使用できます。
--class-path
path- スキャンするjarファイルを指すパスのリストを指定するために使用します。
このリストで指定されたすべてのjarファイルがスキャンされます。 jarファイルのマニフェストにClass-Path
属性が含まれている場合、そこにリストされているjarファイルもスキャンされます。 Class-Path
マニフェスト属性にリストされている、見つからないJARファイルは無視されます。 見つかったjarファイルはすべて、名前のないモジュールに属しているかのように扱われます。
--module-path
path-
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
ディレクティブで指定されたサービス実装への依存性が含まれます。 そのようなサービスの実装を提供するモジュール・パス上にあるすべてのモジュールもスキャンされます。 --release
version-
スキャンする制限付きメソッドのセットを指定する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ファイル(つまり、名前のないモジュール内)にネイティブ機能へのアクセスが含まれていることを示します。