Java Platform, Standard Edition

ツール・リファレンス

リリース9

E91918-01(原本部品番号:E61612-05)

2017年10月

このドキュメントには、Java Development Kit (JDK)とともにインストールされるツールのリファレンス情報が掲載されています。

Java Platform, Standard Editionツール・リファレンス, リリース9

E91918-01

Copyright © 1993, 2017, Oracle and/or its affiliates.  All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle およびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 ツールおよびコマンドのリファレンス

2 アプリケーションを作成および構築するための主要ツール

- javac

- 注釈処理

- 型の検索

- javap

- javah

- javadoc

- java

- javaのコマンド行引数ファイル

- JVM統合ロギングフレームワークを使用したロギングの有効化

- Java仮想マシンのフラグ引数の検証

- ラージ・ページ

- アプリケーション・クラス・データ共有

- パフォーマンス・チューニングの例

- 終了ステータス

- appletviewer

- アプレットビューアのタグ

- jar

- jlink

- jmod

- jdeps

- jdeprscan

3 言語シェル

- jshell

4 セキュリティのツールおよびコマンド

- keytool

- jarsigner

- policytool

- kinit

- klist

- ktab

5 Remote Method Invocation (RMI)のツールおよびコマンド

- rmic

- rmiregistry

- rmid

- serialver

6 Java IDLとJava RMI-IIOPのツールおよびコマンド

- tnameserv

- idlj

- orbd

- servertool

7 Javaデプロイメント・ツールおよびコマンド

- pack200

- unpack200

- javapackager

8 Java Web Startツール

- javaws

9 モニタリングのツールおよびコマンド

- jconsole

- jps

- jstat

- jstatd

- jmc

10 Webサービスのツールおよびコマンド

- schemagen

- wsgen

- wsimport

- xjc

11 Java Accessibilityユーティリティおよびコマンド

- jaccessinspector

- jaccesswalker

12 トラブルシューティングのツールおよびコマンド

- jcmd

- jdb

- jhsdb

- jinfo

- jmap

- jstack

13 スクリプト・コマンド

- jjs

- jrunscript

はじめに

「Java Platform, Standard Edition (Java SE)コマンド・リファレンス」では、Java SEコマンドの有効なオプションと引数について説明します。ほとんどの場合、正しい使用方法を示す例が含まれています。

対象読者

このドキュメントは、JDK 9に用意されているツールおよびコマンドを使用する必要があるJava SE開発者を対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、Oracle JDK 9ドキュメントのドキュメントを参照してください。

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 ツールおよびコマンドのリファレンス

JDKのツールおよびコマンドを使用すると、プログラムのコンパイルおよび実行、Java Archive (JAR)ファイルへのソース・ファイルのパッケージ化、JARファイルへのセキュリティ・ポリシーの適用など、開発者は開発タスクを処理できます。

ツールおよびコマンドのリファレンス・トピックでは、Java Development Kit (JDK)のツールを示し、説明します。これらは、実行する関連機能に基づいて次の項に分類されています。実行に使用するツールおよびコマンドの詳細は、このガイドの対応する項を参照してください。

主要ツール

次の基礎のツールおよびコマンドを使用すると、アプリケーションの作成および構築が可能です。

- javac: javacツールとそのオプションは、Javaクラスとインタフェースの定義を読み取り、バイトコードおよびクラス・ファイルにコンパイルする場合に使用できます。

- javap: javapコマンドは、1つ以上のクラス・ファイルを逆アセンブルする場合に使用します。

- javah: javahツールは、JavaクラスからCヘッダー・ファイルおよびソース・ファイルを生成する場合に使用します。

- javadoc: javadocツールとそのオプションは、Javaソース・ファイルからAPIドキュメントのHTMLページを生成する場合に使用します。

- java: javaコマンドは、Javaアプリケーションを起動する場合に使用できます。

- appletviewer: appletviewerコマンドは、Webブラウザを使用せずにアプレットビューアを起動したりアプレットを実行する場合に使用します。

- jar: jarコマンドは、クラスおよびリソースのアーカイブを作成したり、個々のクラスまたはリソースをアーカイブから操作または復元する場合に使用できます。

- jlink: jlinkツールは、一連のモージュールとその依存関係をカスタム・ランタイム・イメージとしてアセンブルして最適化する場合に使用できます。

- jmod: jmodツールは、JMODファイルを作成したり、既存のJMODファイルの内容をリストする場合に使用します。

- jdeps: jdepsコマンドは、Javaクラスの依存関係アナライザを起動する場合に使用します。

- jdeprscan: jdeprscanツールは、非推奨のAPI要素の使用についてjarファイル(またはクラス・ファイルの他の集合)をスキャンする静的分析ツールとして使用します。

言語シェル

次のツールを使用すると、Java言語を試用するための対話型環境を得られます。

- jshell: jshellツールは、Javaプログラミング言語の宣言、文および式をread-eval-printループ(REPL)で対話しながら評価する場合に使用します。

セキュリティ・ツール

次のセキュリティ・ツールでは、システムにセキュリティ・ポリシーを設定したり、リモート・サイトで設定されたセキュリティ・ポリシーの範囲内で動作するアプリケーションを作成できます。

- keytool: keytoolコマンドおよびオプションは、暗号化鍵、X.509証明書チェーンおよび信頼できる証明書を含むキーストア(データベース)の管理に使用します。

- jarsigner: jarsignerツールは、Java Archive (JAR)ファイルの署名および検証に使用します。

- policytool: policytoolは、ユーティリティGUI経由で取得したユーザー入力に基づいた、プレーン・テキストのポリシー・ファイルの読取りおよび書込みに使用します。

次のツールでは、WindowsにおけるKerberosチケットの取得、リストおよび管理を行うことができます。

- kinit: kinitツールとそのオプションは、Kerberosチケット認可チケットを取得およびキャッシュする場合に使用します。

- klist: klistツールは、ローカルの資格キャッシュおよびキー表のエントリを表示する場合に使用します。

- ktab: ktabツールは、ローカルのキー表に格納されたプリンシパル名とサービス鍵を管理する場合に使用します。

Remote Method Invocation (RMI)ツール

次のツールを使用すると、Webまたはその他のネットワーク経由で対話するアプリケーションを作成できます。

- rmic: rmicコンパイラは、Java Remote Method Protocol (JRMP)を使用したスタブおよびスケルトン・クラス・ファイルを生成する場合や、リモート・オブジェクト用のスタブおよびtieクラス・ファイル(IIOPプロトコル)を生成する場合に使用します。

- rmiregistry: rmiregistryコマンドは、現在のホストの指定されたポート上でリモート・オブジェクト・レジストリを作成して開始する場合に使用します。

- rmid: rmidコマンドは、オブジェクトをJava仮想マシン(JVM)に登録して起動できるようにする、起動システム・デーモンを開始する場合に使用します。

- serialver: serialverコマンドは、1つ以上のクラスのserialVersionUIDを、展開しているクラスにコピーするのに適した形式で返す場合に使用します。

Java IDLおよびRMI-IIOPツール

次のツールを使用すると、OMG標準IDLおよびCORBA/IIOPを使用するアプリケーションを作成できます。

- tnameserv: tnameservコマンドは、Object Request Broker Daemon (ORBD)の代替として使用します。

- idlj: idljコマンドは、指定されたインタフェース定義言語(IDL)ファイルのJavaバインディングを生成する場合に使用します。

- orbd: orbdコマンドは、クライアントがCORBA環境内のサーバーにある永続オブジェクトを透過的に検索して呼び出す場合に使用します。

- servertool: servertoolコマンド行ツールは、永続サーバーを登録、登録解除、起動および停止する場合に使用します。

Javaデプロイメント・ツール

次のユーティリティを使用すると、Web上にJavaアプリケーションおよびJavaアプレットをデプロイできます。

- pack200: pack200コマンドは、Java gzip圧縮プログラムを使用して、Java Archive (JAR)ファイルをpack200圧縮ファイルに変換する場合に使用します。

- unpack200: unpack200コマンドは、Webデプロイメント用にパック・ファイルをJARファイルに変換する場合に使用します。

- javapackager: javapackagerコマンドは、JavaアプリケーションとJavaFXアプリケーションのパッケージ化に関連するタスクを実行する場合に使用します。

Java Web Start

次のユーティリティでは、Java Web Startアプリケーションを起動できます。

- javaws: javawsツールのコマンドとそのオプションは、Java Web Startを起動する場合に使用します。

モニタリング・ツール

次のツールを使用すると、パフォーマンスの統計情報をモニターできます。

注意:

次のツールで試験的と指定されているものはサポート対象外であり、その点を理解した上で使用してください。これらは将来のJDKバージョンでは利用できなくなる場合があります。

- jconsole: jconsoleコマンドは、Javaアプリケーションをモニターして管理するためにグラフィカル・コンソールを起動する場合に使用します。

- jps: 試験的 jpsコマンドは、ターゲット・システム上で計測されたJVMをリストする場合に使用します。

- jstat: 試験的 jstatコマンドは、JVMの統計情報をモニターする場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jstatd: 試験的 jstatdコマンドは、計測されたJava HotSpot VMの作成および終了をモニターする場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jmc: jmcコマンドとそのオプションは、Java Mission Controlを起動する場合に使用します。Java Mission Controlは、プロファイリング、モニタリングおよび診断ツールのスイートです。

Java Web Servicesツール

次のツールを使用すると、Webサービスを提供するアプリケーションを作成できます。

- schemagen: schemagenツールおよびコマンドは、Javaクラスで参照されるネームスペースごとにスキーマを生成する場合に使用できます。

- wsgen: wsgenコマンドは、JAX-WS Webサービスで使用されるJava API for XML Webサービス(JAX-WS)ポータブル・アーティファクトを生成する場合に使用します。

- wsimport: wsimportコマンドは、Java API for XML Webサービス(JAX-WS)ポータブル・アーティファクトを生成する場合に使用します。

- xjc: xjcシェル・スクリプトは、XMLスキーマ・ファイルをコンパイルして、完全注釈付きJavaクラスにする場合に使用します。

Java Accessibilityユーティリティ

次のユーティリティを使用すると、Javaオブジェクトのアクセシビリティをチェックできます。

- jaccessinspector: Java AccessibilityユーティリティAPI用のjaccessinspectorアクセシビリティ評価ツールは、Java仮想マシンのオブジェクトに関するアクセス可能な情報を調べる場合に使用します。

- jaccesswalker: jaccesswalkerは、特定のJava仮想マシンのコンポーネント・ツリーをナビゲートしたり、ツリー・ビューの階層を表示する場合に使用します。

トラブルシューティング・ツール

次のツールを使用すると、特定のトラブルシューティング・タスクを実行できます。

注意:

次のツールで試験的と指定されているものはサポート対象外であり、その点を理解した上で使用してください。これらは将来のJDKバージョンでは利用できなくなる場合があります。これらのツールの一部は、現在Windowsプラットフォームでは利用できません。

- jcmd: jcmdユーティリティは、実行中のJava仮想マシン(JVM)に診断コマンド要求を送信する場合に使用します。

- jdb: jdbコマンドとそのオプションは、Javaプラットフォームのプログラムで不具合を検出して修正する場合に使用します。

- jhsdb: jhsdbツールは、Javaプロセスに接続するか、事後デバッガを起動して、クラッシュしたJava仮想マシン(JVM)からのコア・ダンプの内容を分析する場合に使用します。

- jinfo: 試験的 jinfoコマンドは、指定されたJavaプロセスに関するJava構成情報を生成する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jmap: 試験的 jmapコマンドは、指定されたプロセスの詳細を出力する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jstack: 試験的 jstackコマンドは、指定されたJavaプロセスに関するJavaスレッドのJavaスタック・トレースを出力する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

スクリプト・ツール

次のツールを使用すると、Javaプラットフォームとやり取りするスクリプトを実行できます。

注意:

次のツールで試験的と指定されているものはサポート対象外であり、その点を理解した上で使用してください。これらは将来のJDKバージョンでは利用できなくなる場合があります。

- jjs: jjsコマンド行ツールは、Nashornエンジンを起動する場合に使用します。

- jrunscript: 試験的 jrunscriptコマンドは、対話型モードおよびバッチ・モードがサポートされるコマンド行スクリプト・シェルを実行する場合に使用します。

2 アプリケーションを作成および構築するための主要ツール

基礎のJDKツールおよびコマンドを使用すると、アプリケーションを作成および構築できます。

次の各項では、アプリケーションの作成と構築に使用できるツールおよびコマンドについて説明します。

- javac: javacツールとそのオプションは、Javaクラスとインタフェースの定義を読み取り、バイトコードおよびクラス・ファイルにコンパイルする場合に使用できます。

- javap: javapコマンドは、1つ以上のクラス・ファイルを逆アセンブルする場合に使用します。

- javah: javahツールは、JavaクラスからCヘッダー・ファイルおよびソース・ファイルを生成する場合に使用します。

- javadoc: javadocツールとそのオプションは、Javaソース・ファイルからAPIドキュメントのHTMLページを生成する場合に使用します。

- java: javaコマンドは、Javaアプリケーションを起動する場合に使用できます。

- appletviewer: appletviewerコマンドは、Webブラウザを使用せずにアプレットビューアを起動したりアプレットを実行する場合に使用します。

- jar: jarコマンドは、クラスおよびリソースのアーカイブを作成したり、個々のクラスまたはリソースをアーカイブから操作または復元する場合に使用できます。

- jlink: jlinkツールは、一連のモージュールとその依存関係をカスタム・ランタイム・イメージとしてアセンブルして最適化する場合に使用できます。

- jmod: jmodツールは、JMODファイルを作成したり、既存のJMODファイルの内容をリストする場合に使用します。

- jdeps: jdepsコマンドは、Javaクラスの依存関係アナライザを起動する場合に使用します。

- jdeprscan: jdeprscanツールは、非推奨のAPI要素の使用についてjarファイル(またはクラス・ファイルの他の集合)をスキャンする静的分析ツールとして使用します。

javac

javacツールとそのオプションは、Javaクラスとインタフェースの定義を読み取り、バイトコードおよびクラス・ファイルにコンパイルする場合に使用できます。

形式

javac [ options ] [ sourcefiles ]

options

コマンド行オプション。「javacのオプションの概要」を参照してください。

sourcefiles

コンパイル対象となる1つ以上のファイル(MyClass.javaなど)または注釈の処理対象となる1つ以上のファイル(MyPackage.MyClassなど)。

説明

javacコマンドは、Javaプログラミング言語で記述されたクラスとインタフェースの定義を読み取り、バイト・コードのクラス・ファイルにコンパイルします。また、javacコマンドは、Javaソース・ファイルおよびクラス内の注釈も処理できます。

JDK 9では、新しいランチャ環境変数JDK_JAVAC_OPTIONSが導入されており、その内容がjavacに渡されるコマンド行の先頭に追加されます。「JDK_JAVAC_OPTIONS環境変数の使用方法」を参照してください。

ソース・コードのファイル名をjavacに渡すには、2つの方法があります。

- ソース・ファイルの数が少ない場合は、ファイル名をコマンド行に指定できます。

- ソース・ファイルの数が多い場合は、javacコマンド行で@filenameオプションを使用して、ソース・ファイル名をリストしたファイルを指定できます。オプションの説明は「javacの標準オプション」を、javacの引数ファイルの説明は「javacのコマンド行引数ファイル」を参照してください。

ソース・コードのファイル名には.java接尾辞が必要で、クラスのファイル名には.class接尾辞が必要であり、ソース・ファイルとクラス・ファイルのどちらも、クラスを識別するルート名が必要です。たとえば、MyClassという名前のクラスは、MyClass.javaというソース・ファイルに記述され、MyClass.classというバイトコード・クラス・ファイルにコンパイルされます。

内部クラスが定義されていると、追加のクラス・ファイルが生成されます。これらのクラス・ファイルの名前は、MyClass$MyInnerClass.classのように、内部クラス名と外部クラス名を組み合わせたものになります。

ソース・ファイルは、パッケージ・ツリーを反映したディレクトリ・ツリーに配置する必要があります。例:

- Oracle Solaris、LinuxおよびOS X: すべてのソース・ファイルを/workspaceに置いている場合、com.mysoft.mypack.MyClassのソース・コードは/workspace/com/mysoft/mypack/MyClass.javaに置きます。

- Windows: すべてのソース・ファイルを\workspaceに置いている場合、com.mysoft.mypack.MyClassのソース・コードは\workspace\com\mysoft\mypack\MyClass.javaに置きます。

デフォルトでは、コンパイラは、各クラス・ファイルを対応するソース・ファイルと同じディレクトリに置きます。-dオプション(「javacの標準オプション」を参照)で別の出力先ディレクトリを指定できます。

プログラマティック・インタフェース

javacコマンドは、javax.toolsパッケージ内のクラスとインタフェースによって定義される新しいJava Compiler APIをサポートします。

暗黙的にロードされたソース・ファイル

コンパイラは、一連のソース・ファイルをコンパイルする際に、別のソース・ファイルを暗黙的にロードしなければならない場合があります。「型の検索」を参照してください。そのようなファイルは、現時点では注釈処理の対象になりません。デフォルトでは、注釈処理が実行され、かつ暗黙的にロードされたソース・ファイルが1つでもコンパイルされた場合にコンパイラは警告を発行します。-implicitオプションは、警告を抑制する方法を提供します。

JDK_JAVAC_OPTIONS環境変数の使用方法

JDK_JAVAC_OPTIONS環境変数の空白( )または空白文字(\n、\t、\rまたは\f)で区切られた内容は、javacに渡されるコマンド行引数の先頭に引数のリストとして追加されます。

環境変数のエンコーディング要件は、システムのjavacコマンド行と同じです。JDK_JAVAC_OPTIONS環境変数の内容は、コマンド行に指定した場合と同じ方法で処理されます。

一重引用符(')または二重引用符(")を使用して、空白文字が含まれる引数を囲むことができます。開始引用符と対応する最初の終了引用符の間の内容すべてが引用符のペアを除いて保存されます。対応する引用符が見つからなかった場合、ランチャはエラー・メッセージを発行して停止します。@filesは、コマンド行に指定するとサポートされます。ただし、@files内と同様、ワイルドカードの使用はサポートされません。

空白が含まれる引数を引用符で囲む例:

export JDK_JAVAC_OPTIONS=‘@"C:\white spaces\argfile”'

export JDK_JAVAC_OPTIONS=‘"@C:\white spaces\argfile”'

export JDK_JAVAC_OPTIONS='@C:\"white spaces"\argfile'

javacのオプションの概要

コンパイラには、現在の開発環境でサポートされている一連の標準オプションと、クロスコンパイル・オプションがあります。また、現在の仮想マシンおよびコンパイラの実装に固有のオプションで、将来に変更される可能性がある一連の非標準オプションもあります。非標準オプションは、-Xで始まります。javacの様々なオプション・セットは、次の各項で説明します。

- javacの標準オプション

- javacのクロスコンパイル・オプション

- javacの追加オプション

javacの標準オプション

@filename

ファイルからオプションおよびファイル名を読み取ります。javacコマンドを短くしたり簡潔にしたりするために、javacコマンドへの引数(-Jオプションを除く)を含んだ1つ以上のファイルを指定できます。このことを利用すれば、どのオペレーティング・システム上でも、任意の長さのjavacコマンドを作成できます。「javacのコマンド行引数ファイル」を参照してください。

-Akey[=value]

注釈プロセッサに渡すオプションを指定します。これらのオプションは、javacが直接解釈するのではなく、それぞれのプロセッサによって使用できるようにします。key値はドット(.)によって区切られた1つ以上の識別子にすべきです。

--add-modules module , module

初期モジュールに加えて解決するルート・モジュール、またはmoduleがALL-MODULE-PATHの場合はモジュール・パスのすべてのモジュールを指定します。

--boot-class-path pathまたは-bootclasspath path

ブートストラップ・クラス・ファイルの位置をオーバーライドします。

注意:

このオプションは、JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

--class-path path、-classpath pathまたは-cp path

ユーザー・クラス・ファイルと注釈プロセッサを検索する場所を指定します。このクラス・パスはCLASSPATH環境変数のユーザー・クラス・パスをオーバーライドします。

- --class-path、-classpathまたは-cpが指定指定されていない場合、ユーザー・クラス・パスは現在のディレクトリになります。

- -sourcepathオプションが指定されていない場合は、ソース・ファイルもユーザー・クラス・パスから検索されます。

- -processorpathオプションが指定されていない場合は、注釈プロセッサもクラス・パスから検索されます。

-d directory

クラス・ファイルの出力先ディレクトリを設定します。クラスがパッケージに含まれる場合、javacは、パッケージ名を反映したサブディレクトリにクラス・ファイルを置き、必要に応じてディレクトリを作成します。例:

- Oracle Solaris、LinuxおよびOS X: -d /home/myclassesと指定した場合、クラスの名前がcom.mypackage.MyClassであれば、クラス・ファイルは/home/myclasses/com/mypackage/MyClass.classになります。

- Windows: -d C:\myclassesと指定し、クラスの名前がcom.mypackage.MyClassである場合、クラス・ファイルはC:\myclasses\com\mypackage\MyClass.classになります。

-dオプションが指定されていない場合、javacは各クラス・ファイルを、その生成元となるソース・ファイルと同じディレクトリ内に格納します。

注意:

-dオプションで指定したディレクトリはユーザー・クラス・パスに自動的には追加されません。

-deprecation

非推奨のメンバーやクラスの使用またはオーバーライドのたびに説明を表示します。-deprecationオプションが指定されていない場合、javacは、非推奨のメンバーやクラスを使用またはオーバーライドしているソース・ファイルのサマリーを表示します。-deprecationオプションは-Xlint:deprecationの省略表記です。

-encoding encoding

ソース・ファイルで使用される文字エンコーディング(EUC-JPやUTF-8など)を指定します。-encodingオプションが指定されていない場合は、プラットフォームのデフォルト・コンバータが使用されます。

-endorseddirs directories

承認された標準パスの位置をオーバーライドします。

注意:

このオプションは、JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

-extdirs directories

インストールされた拡張機能の位置をオーバーライドします。directories変数は、コロンで区切ったディレクトリのリストです。指定したディレクトリ内の各JARファイルから、クラス・ファイルが検索されます。見つかったすべてのJARファイルがクラス・パスの一部になります。

クロスコンパイルを行う場合、このオプションには拡張クラスが格納されているディレクトリを指定します。「javacのクロスコンパイル・オプション」を参照してください。

注意:

このオプションは、JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

-g

ローカル変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソース・ファイル情報だけが生成されます。

-g:[lines, vars, source],[lines, vars, source],[lines, vars, source]

カンマで区切られたキーワードのリストによって指定された種類のデバッグ情報のみを生成します。有効なキーワードは、次のとおりです。

lines

行番号のデバッグ情報。

vars

ローカル変数のデバッグ情報。

source

ソース・ファイルのデバッグ情報。

-g:none
デバッグ情報を生成しません。

-h directory
生成されるネイティブ・ヘッダー・ファイルを格納する場所を指定します。

このオプションを指定すると、ネイティブ・メソッドが含まれるクラスまたはjava.lang.annotation.Native注釈で注釈付けられた定数が1つ以上あるクラスごとにネイティブ・ヘッダー・ファイルが生成されます。クラスがパッケージに含まれる場合、コンパイラは、パッケージ名を反映したサブディレクトリにネイティブ・ヘッダー・ファイルを置き、必要に応じてディレクトリを作成します。

--helpまたは–help
標準オプションの形式を出力します。

--help-extraまたは-X
追加オプションのヘルプを出力します。

-implicit:{[none, class],[none, class]}
暗黙的に参照されるファイルについてクラス・ファイルを生成するかどうか指定します。

- -implicit:class — クラス・ファイルを自動的に生成します。

- -implicit:none — クラス・ファイルの生成を抑制します。

このオプションを指定しなかった場合、デフォルトではクラス・ファイルが自動的に生成されます。その場合、クラス・ファイルが生成されたときに注釈処理も実行されると、コンパイラから警告が発行されます。-implicitオプションが明示的に設定された場合には、警告は発行されません。「型の検索」を参照してください。

-Joption
optionをランタイム・システムに渡します(optionは、javaコマンドで説明されているjavaのオプションのいずれかです)。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。

注意:

CLASSPATH環境変数、-classpathオプション、-bootclasspathオプションおよび-extdirsオプションは、javacの実行に使用するクラスを指定しません。これらのオプションや変数でコンパイラ実装をカスタマイズしようとすることは危険であり、目的が実現されないことがあります。コンパイラ実装をカスタマイズする必要がある場合は、-Jオプションを使用して、オプションを基礎となるJavaランチャに渡してください。

--limit-modules module , module*
参照可能なモジュールの領域を制限します。

--module module-nameまたは-m module-name
指定されたモジュールのみをコンパイルし、タイムスタンプをチェックします。

--module-path pathまたは-p path
アプリケーション・モジュールの参照先を指定します。

--module-source-path module-source-path
複数のモジュールの入力ソース・ファイルの参照先を指定します。

--module-version version コンパイルされるモジュールのバージョンを指定します。 -nowarn
警告メッセージを無効にします。このオプションは、-Xlint:noneオプションと同じように動作します。

-parameters
メソッド・パラメータにリフレクション用のメタデータを生成します。Reflection APIのメソッドjava.lang.reflect.Executable.getParametersが取得できるように、コンストラクタやメソッドの仮パラメータ名を、生成されたクラス・ファイルに格納します。

-proc: [none, only] , [none, only]
注釈処理とコンパイルが実行されるかどうかを制御します。-proc:noneは、注釈処理なしでコンパイルが実行されることを意味します。-proc:onlyは、注釈処理のみが実行され、後続のコンパイルは実行されないことを意味します。

-processor class1 [,class2,class3...]
実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。

--processor-module—path pathまたは-p module-path
注釈プロセッサの検索に使用されるモジュール・パスを指定します。

--processor—path pathまたは-processorpath path
注釈プロセッサを見つける場所を指定します。このオプションが使用されていない場合、クラス・パスでプロセッサが検索されます。

-profile profile
使用されるAPIが指定プロファイルで使用可能であることをチェックします。

注意:

JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

--release release
特定のVMバージョンについてサポートされるドキュメント化されたパブリックAPIに対してコンパイルします。サポートされるreleaseターゲットは、6、7、8および9です。

注意:

モジュールをサポートするJava Platformのバージョンに--releaseを使用すると、--add-modulesを使用して内部JDKモジュールにアクセスすることも、--add-exportsを使用してモジュールの内部JDK APIにアクセスすることもできません。

-s directory
生成されたソース・ファイルの格納に使用されるディレクトリを指定します。クラスがパッケージに含まれる場合、コンパイラは、パッケージ名を反映したサブディレクトリにソース・ファイルを置き、必要に応じてディレクトリを作成します。例:

- Oracle Solaris、LinuxおよびOS X: -s /home/mysrcと指定し、クラスの名前がcom.mypackage.MyClassである場合、ソース・ファイルは/home/mysrc/com/mypackage/MyClass.javaに格納されます。

- Windows: -s C:\mysrcと指定し、クラスの名前がcom.mypackage.MyClassである場合、ソース・ファイルはC:\mysrc\com\mypackage\MyClass.javaに格納されます。

-source release
受け付けるソース・コードのバージョンを指定します。releaseには次の値を指定できます。

注意:

JDK 9から、javacでは5以下の-sourceリリースの設定がサポートされていません。5以下の設定が使用されると、javacコマンドは-source 6が指定されているように動作します。

1.6

Java SE 6では言語に対する変更は導入されませんでした。ただし、ソース・ファイル内のエンコーディング・エラーが、Java Platform, Standard Editionの以前のリリースで行われたような警告ではなく、エラーとして報告されるようになりました。

6

1.6と同義です。

1.7

Java SE 7で導入された機能を含むコードを受け付けます。

7

1.7と同義です。

1.8

Java SE 8で導入された機能を含むコードを受け付けます。

8

1.8と同義です。

9

デフォルト値です。Java SE 9で導入された機能を含むコードを受け付けます。

--source-path pathまたは-sourcepath path
入力ソース・ファイルの検索場所を指定します。これは、クラスまたはインタフェースの定義の検索に使用されるソース・コード・パスです。ユーザー・クラス・パスと同様に、ソース・パスのエントリは、Oracle Solarisではコロン(:)で、Windowsではセミコロンで区切ります。ディレクトリ、JARアーカイブまたはZIPアーカイブを指定できます。パッケージを使用している場合は、ディレクトリまたはアーカイブ内のローカル・パス名がパッケージ名を反映していなければなりません。

注意:

クラス・パスを通じて見つかったクラスは、それらのソース・ファイルも見つかった場合にコンパイルできます。「型の検索」を参照してください。

--system jdk | none
システム・モジュールの場所をオーバーライドします。

-target release
特定のVMバージョンについてクラス・ファイルを生成します。

--upgrade-module—path path
アップグレード可能モジュールの場所をオーバーライドします。

-verbose
コンパイラが実行している処理に関するメッセージを出力します。メッセージには、ロードされるクラスおよびコンパイルされるソース・ファイルごとの情報が含まれます。

--versionまたは-version
バージョン情報を出力します。

-Werror
警告が発生したらコンパイルを終了します。

javacのクロスコンパイル・オプション

デフォルトでは、JDK 9より前のリリースの場合、クラスのコンパイルは、javacコマンドに付属するプラットフォームのブートストラップ・クラスに対して行われます。ただし、javacはクロスコンパイルもサポートしており、このコンパイルでは異なるJavaプラットフォーム実装のブートストラップ・クラスに対してクラスのコンパイルを行います。クロスコンパイルを行う場合は、-bootclasspathオプションおよび-extdirsオプションを使用することが重要です。

注意:

JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

javacの追加オプション

--add-exports module/package=other-module(,other-module)*

定義モジュールから追加モジュールに、あるいはother-moduleの値がALL-UNNAMEDの場合はすべての名前のないモジュールにエクスポートされると見なされるパッケージを指定します。

--add-reads module=other-module(,other-module)*

指定のモジュールで必須と見なされる追加モジュールを指定します。

-Djava.endorsed.dirs=dirs

承認された標準パスの位置をオーバーライドします。

注意:

JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

-Djava.ext.dirs=dirs

インストールされた拡張機能の位置をオーバーライドします。

注意:

このオプションは、JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

--doclint-format [html4|html5]

ドキュメント・コメントの形式を指定します。

--patch-module module=file(:file)*

JARファイルまたはディレクトリ内のクラスおよびリソースでモジュールをオーバーライドまたは拡張します。

-Xbootclasspath:path

ブートストラップ・クラス・ファイルの位置をオーバーライドします。

注意:

このオプションは、JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

-Xbootclasspath/a:path

ブートストラップ・クラス・パスに接尾辞を追加します。

注意:

このオプションは、JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

-Xbootclasspath/p:path

ブートストラップ・クラス・パスに接頭辞を追加します。

注意:

このオプションは、JDK 9で--release releaseを使用してコンパイルする場合、サポートされません。JDK 9以外のバージョンでのコンパイルの詳細は、--release releaseの説明を参照してください。

-Xdiags:[compact, verbose]

診断モードを選択します。

-Xdoclint

javadocコメントの問題に関する推奨チェックを有効にします

-Xdoclint:(all|none|[-]group) [/access]

特定のグループのチェックを有効または無効にします(groupは次の値のいずれかです)。

- accessibility

- html

- missing

- reference

- syntax

これらのチェックのグループの詳細は、javadocコマンドの-Xdoclintオプションを参照してください。javacコマンドで-Xdoclintオプションはデフォルトで無効にされています。

変数accessは、-Xdoclintオプションでチェックするクラスとメンバーの最低の可視性レベルを指定します。これは、(最大から最低の可視性の順序で)次の値のいずれかになります。

- public

- protected

- package

- private

デフォルトのアクセス・レベルはprivateです。

たとえば、次のオプションは、protected以上のアクセス・レベル(protectedおよびpublicを含む)を持つクラスおよびメンバー(すべてのチェックのグループで)をチェックします。

-Xdoclint:all/protected

次のオプションは、アクセス・レベルがpackage以上(package、protectedおよびpublicを含む)のクラスとメンバーのHTMLエラーをチェックしないことを除いて、すべてのアクセス・レベルのすべてのグループのチェックを有効にします。

-Xdoclint:all,-html/package

Xdoclint/package:[-]packages(,[-]package)*

特定のパッケージのチェックを有効または無効にします。各packageは、パッケージの修飾名またはパッケージ名の接頭辞の後に*を指定(指定されたパッケージのすべてのサブパッケージまで拡張)したものです。各packageの前に-を指定すると、1つまたは複数の指定されたパッケージに関するチェックを無効にできます。

-Xlint

推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。

-Xlint:key(,key)*

有効または無効にする警告をカンマで区切って指定します。指定した警告を無効にするには、キーの前にハイフン(-)を指定します。

サポートされているkeyの値は、次のとおりです。

- all — すべての警告を有効にします。

- auxiliaryclass — ソース・ファイルでは非表示で、他のファイルから使用される補助クラスについて警告します。

- cast — 不要なキャストの使用について警告します。

- classfile — クラス・ファイルの内容に関連した問題について警告します。

- deprecation — 非推奨項目の使用について警告します。

- dep-ann — javadocで非推奨とマークされているのに@Deprecated注釈を使用していない項目について警告します。

- divzero — 定整数0による除算について警告します。

- empty — if以降が空の文であることについて警告します。

- exports — モジュールのエクスポートに関する問題について警告します。

- fallthrough — switch文の1つのcaseから次へのフォール・スルーについて警告します。

- finally — 正常に完了しないfinally節について警告します。

- module — モジュール・システム関連の問題について警告します。

- opens — モジュールのオープンに関する問題について警告します。

- options — コマンド行オプションの使用に関する問題について警告します。

- overloads — メソッドのオーバーロードに関する問題について警告します。

- overrides — メソッドのオーバーライドに関する問題について警告します。

- path — コマンド行の無効なパス要素について警告します。

- processing — 注釈処理に関する問題について警告します。

- rawtypes — raw型の使用について警告します。

- removal — 削除用にマークされたAPIの使用について警告します。

- serial — シリアル・バージョンIDを指定しない直列化可能なクラスについて警告します。また、直列化可能要素からpublic以外のメンバーへのアクセスについて警告します。

- static — インスタンスを使用したstaticメンバーへのアクセスについて警告します。

- try — tryブロック(try-with-resources)の使用に関する問題について警告します。

- unchecked — 無検査操作について警告します。

- varargs — 安全ではない可能性があるvarargメソッドについて警告します

- none — すべての警告を無効にします。

「-Xlintのキーの使用例」を参照してください。

-Xmaxerrs number

印刷するエラーの最大数を設定します。

-Xmaxwarns number

印刷する警告の最大数を設定します。

-Xpkginfo:[always, legacy, nonempty]

javacコマンドが次のオプションのいずれかを使用してpackage-info.javaファイルからpackage-info.classファイルを生成する場合とその方法を指定します。

always

すべてのpackage-info.javaファイルに対して、package-info.classファイルを生成します。このオプションは、各.javaファイルに対応する.classファイルがあることをチェックするAntなどのビルド・システムを使用する場合に役立つことがあります。

legacy

package-info.javaに注釈が含まれる場合にのみ、package-info.classファイルを生成します。このオプションでは、package-info.javaにコメントのみが含まれる場合は、package-info.classファイルを生成しません。

注意:

package-info.classファイルのすべての注釈にRetentionPolicy.SOURCEがある場合、package-info.classファイルは生成されますが、空になります。

nonempty

package-info.javaにRetentionPolicy.CLASSまたはRetentionPolicy.RUNTIMEのある注釈が含まれる場合にのみ、package-info.classファイルを生成します。

-Xplugin:name args
実行されるプラグインの名前およびオプションの引数を指定します。

-Xprefer:[sourceまたはnewer]
次のオプションのいずれかを使用して、暗黙的にコンパイルされるクラスについて、てソース・ファイルとクラス・ファイルの両方が見つかった場合、どのファイルを読み取るかを指定します。「型の検索」を参照してください。

- -Xprefer:newer — ある型に対するソース・ファイルとクラス・ファイルの新しい方が読み取られます(デフォルト)。

- -Xprefer:source — ソース・ファイルが読み取られます。SOURCEの保存ポリシーを使用して宣言された注釈に任意の注釈プロセッサがアクセスできるようにする場合は、-Xprefer:sourceを使用してください。

-Xprint
指定された型のテキスト表現をデバッグ目的で出力します。注釈処理もコンパイルも実行しません。出力形式は変更される可能性があります。

-XprintProcessorInfo
ある特定のプロセッサが処理を依頼されている注釈に関する情報を出力します。

-XprintRounds
初回および後続の注釈処理のラウンドに関する情報を出力します。

-Xstdout filename
コンパイラのメッセージを、指定されたファイルに送ります。デフォルトでは、コンパイラのメッセージはSystem.errに送られます。

javacのコマンド行引数ファイル

引数ファイルには、javacのオプションとソース・ファイル名を自由に組み合わせて記述できます。ファイル内の引数は、空白文字または改行文字で区切ることができます。ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。

引数ファイル内のファイル名は、現在のディレクトリから相対的で、引数ファイルの場所に対してではありません。このようなリストでは、ワイルドカード(*)は使用できません(たとえば、*.javaとは指定できません)。ファイルを再帰的に解釈するためのアット記号(@)の使用はサポートされていません。-Jオプションはサポートされていません(このオプションはランチャに渡されますが、ランチャでは引数ファイルをサポートしていないためです)。

javacコマンドを実行するときに、各引数ファイルのパスとファイル名の先頭にアット記号(@)を付けて渡します。javacコマンドは、アット記号(@)で始まる引数を検出すると、そのファイルの内容を引数リストに展開します。

javac @filenameの使用例

単一の引数ファイル

すべてのjavac引数を保持するargfileという名前の単一の引数ファイルを使用できます。

javac @argfile

この引数ファイルには、例2で示されている両方のファイルの内容を格納できます。

2つの引数ファイル

たとえば、javacオプション用に1ファイル、ソース・ファイル名用に1ファイルというように、2つの引数ファイルを作成できます。次のリストでは、行の継続文字を使用していないことに注意してください。

次を含むoptionsというファイルを作成します。

Oracle Solaris、LinuxおよびOS X:

-d classes
-g
-sourcepath /java/pubs/ws/1.3/src/share/classes

Windows:

-d classes
-g
-sourcepath C:\java\pubs\ws\1.3\src\share\classes

次を含むclassesというファイルを作成します。

MyClass1.java
MyClass2.java
MyClass3.java

次に、次のようにjavacコマンドを実行します。

javac @options @classes

パスを使用した引数ファイル

引数ファイルにはパスを指定できますが、ファイル内のすべてのファイル名は、現在の作業ディレクトリに相対的になります(path1やpath2でなく)。

javac @path1/options @path2/classes

-Xlintのキーの使用例

cast

不要で冗長なキャストについて警告します。例:

String s = (String) "Hello!"

classfile

クラス・ファイルの内容に関する問題について警告します。

deprecation

非推奨項目の使用について警告します。例:

java.util.Date myDate = new java.util.Date();
int currentDay = myDate.getDay();

メソッドjava.util.Date.getDayは、JDK 1.1以降、非推奨になりました。

dep-ann

@deprecated Javadocコメントでドキュメント化されているが、@Deprecated注釈が付いていない項目について警告します。例:

/**
* @deprecated As of Java SE 7, replaced by {@link #newMethod()}
*/
public static void deprecatedMethod() { }
public static void newMethod() { }

divzero

定整数0による除算について警告します。例:

int divideByZero = 42 / 0;

empty

if 文以降が空の文であることについて警告します。たとえば、次のようになります。

class E {
void m() {
if (true) ;
}
}

fallthrough

fall-through caseのswitchブロックをチェックし、検出されたものに対して警告メッセージを表示します。Fall-through caseは、switchブロック内の最後のcaseを除くcaseです。このコードにはbreak文は含まれず、コードの実行をそのcaseから次のcaseへ移動できます。たとえば、このswitchブロック内のcase 1ラベルに続くコードは、break文で終わっていません。

switch (x) {
case 1:
System.out.println("1");
// No break statement here.
case 2:
System.out.println("2");
}

このコードのコンパイル時に-Xlint:fallthroughオプションが使用されていた場合、コンパイラは該当するcaseの行番号とともに、caseにfall-throughする可能性があることを示す警告を発行します。

finally

正常に完了できないfinally節について警告します。例:

public static int m() {
try {
throw new NullPointerException();
}  catch (NullPointerException(); {
System.err.println("Caught NullPointerException.");
return 1;
} finally {
return 0;
}
}

この例では、コンパイラはfinallyブロックに関する警告を生成します。intメソッドが呼び出されると、0の値が返されます。finallyブロックは、tryブロックが終了すると実行されます。この例では、catchブロックに制御が移されると、intメソッドは終了します。ただし、finallyブロックは実行される必要があるため、制御がすでにこのメソッドの外部に移されていても、このブロックは実行されます。

options

コマンド行オプションの使用に関する問題について警告します。「javacのクロスコンパイル・オプション」を参照してください。

overrides

メソッドのオーバーライドに関する問題について警告します。たとえば、次の2つのクラスがあるとします。

public class ClassWithVarargsMethod {
void varargsMethod(String... s) { }
}

public class ClassWithOverridingMethod extends ClassWithVarargsMethod {
@Override
void varargsMethod(String[] s) { }
}

コンパイラは次のような警告を生成します。

warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod
overrides varargsMethod(String...) in ClassWithVarargsMethod; overriding
method is missing '...'

コンパイラがvarargsメソッドを検出すると、varargsの仮パラメータを配列に変換します。メソッドClassWithVarargsMethod.varargsMethodでは、コンパイラはvarargsの仮パラメータString... sを仮パラメータString[] s(配列)に変換しますが、この配列はメソッドClassWithOverridingMethod.varargsMethodの仮パラメータと一致します。その結果、この例ではコンパイルが行われます。

path

コマンド行のクラス・パス、ソース・パスおよびその他のパスとして指定された無効なパス要素と存在しないパス・ディレクトリについて警告します。このような警告を@SuppressWarnings注釈で抑制することはできません。例:

- Oracle Solaris、LinuxおよびOS X: javac -Xlint:path -classpath /nonexistentpath Example.java

- Windows: javac -Xlint:path -classpath C:\nonexistentpath Example.java

processing

注釈処理に関する問題について警告します。コンパイラがこの警告を生成するのは、注釈を含むクラスがあり、そのタイプの例外を処理できない注釈プロセッサを使用している場合です。簡単な注釈プロセッサの例を次に示します。

ソース・ファイルAnnocProc.java:

import java.util.*;
import javax.annotation.processing.*;
import javax.lang.model.*;
import.javaz.lang.model.element.*;

@SupportedAnnotationTypes("NotAnno")
public class AnnoProc extends AbstractProcessor {
public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv){
return true;
}

public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
}
}

ソース・ファイルAnnosWithoutProcessors.java:

@interface Anno { }

@Anno
class AnnosWithoutProcessors { }

次のコマンドは、注釈プロセッサAnnoProcをコンパイルしたあと、ソース・ファイルAnnosWithoutProcessors.javaに対してこの注釈プロセッサを実行します。

javac AnnoProc.java
javac -cp . -Xlint:processing -processor AnnoProc -proc:only AnnosWithoutProcessors.java

ソース・ファイルAnnosWithoutProcessors.javaに対して注釈プロセッサを実行すると、コンパイラは次の警告を生成します。

warning: [processing] No processor claimed any of these annotations: Anno

この問題を解決するには、AnnosWithoutProcessorsクラスで定義および使用されている注釈の名前をAnnoからNotAnnoに変更します。

rawtypes

raw型に対する未チェック操作について警告します。次の文では、rawtypes警告が生成されます。

void countElements(List l) { ... }

次の例は、rawtypes警告が生成されません。

void countElements(List<?> l) { ... }

Listはraw型です。ただし、List<?>はバインドなしのパラメータ化されたワイルドカード型です。Listはパラメータ化されたインタフェースなので、必ずその型引数を指定するようにしてください。この例では、Listの仮引数はバインドなしのワイルドカード(?)を使用してその仮型パラメータとして指定されています。つまり、countElementsメソッドはListインタフェースの任意のインスタンス化を受け入れることができます。

serial

serialVersionUID定義が直列化可能クラスにないことを警告します。例:

public class PersistentTime implements Serializable
{
private Date time;

public PersistentTime() {
time = Calendar.getInstance().getTime();
}

public Date getTime() {
return time;
}
}

コンパイラで次のような警告が生成されます。

warning: [serial] serializable class PersistentTime has no definition of
serialVersionUID

直列化可能クラスがserialVersionUIDという名前のフィールドを明示的に宣言しない場合、直列化ランタイム環境は『Javaオブジェクト直列化仕様』で説明されているように、クラスの様々な側面に基づいて、クラスのserialVersionUIDのデフォルト値を計算します。ただし、すべての直列化可能クラスでserialVersionUID値を明示的に宣言することをお薦めします。これは、serialVersionUID値を計算するデフォルトのプロセスが、コンパイラの実装によって異なる可能性のあるクラスの詳細にきわめて影響を受けやすいためです。その結果、デシリアライズ中に予期しないInvalidClassExceptionsが発生する可能性があります。様々なjavaコンパイラ実装間でserialVersionUID値の一貫性を確保にするには、直列化可能クラスでserialVersionUID値を明示的に宣言しなければいけません。

static

静的変数の使用に関する問題について警告します。例:

class XLintStatic {
static void m1() { }
void m2() { this.m1(); }
}

コンパイラで次のような警告が生成されます。

warning: [static] static method should be qualified by type name,
XLintStatic, instead of by an expression

この問題を解決するために、次のようにstaticメソッドm1を呼び出すことができます。

XLintStatic.m1();

あるいは、staticキーワードをメソッドm1の宣言から削除することもできます。

try

try-with-resources文を含む、tryブロックの使用に関する問題について警告します。たとえば、tryブロックで宣言されたリソースacが使用されていないため、次の文に対して警告が生成されます。

try ( AutoCloseable ac = getResource() ) {    // do nothing}

unchecked

Java言語仕様で指定されている未チェック変換警告の詳細を示します。例:

List l = new ArrayList<Number>();
List<String> ls = l;       // unchecked warning

型の消去中に、型ArrayList<Number>およびList<String>はそれぞれArrayListおよびListになります。

lsコマンドはパラメータ化された型List<String>を持ちます。lによって参照されているListがlsに代入されている場合、コンパイラは非チェック警告を生成します。コンパイル時に、コンパイラとJVMはlがList<String>型を表すかどうかを判断できません。この場合、lはList<String>型を表しません。結果として、ヒープ汚染が発生します。

ヒープ汚染状態が発生するのは、Listオブジェクトl (そのstatic型はList<Number>)が別のListオブジェクトls (異なるstatic型List<String>を持つ)に代入される場合です。しかし、コンパイラはこの代入をいまだに許可しています。この代入を許可する必要があるのは、ジェネリックスをサポートしないJava SEのリリースとの下位互換性を確保するためです。型消去のために、List<Number>とList<String>はListになります。その結果、コンパイラはオブジェクトl (Listというraw型を持つ)をオブジェクトlsに代入することを許可します。

varargs

可変引数(varargs)メソッド、特に非具象化可能引数を含むメソッドの安全でない使用を警告します。例:

public class ArrayBuilder {
public static <T> void addToList (List<T> listArg, T... elements) {
for (T x : elements) {
listArg.add(x);
}
}
}

非具象化可能型は、実行時に型情報を完全に使用できない型です。

コンパイラは、メソッドArrayBuilder.addToListの定義に関する次の警告を生成します。:

warning: [varargs] Possible heap pollution from parameterized vararg type T

コンパイラがvarargsメソッドを検出すると、varargs仮パラメータを配列に変換します。しかし、Javaプログラミング言語では、パラメータ化された型の配列の作成は許可されません。メソッドArrayBuilder.addToListでは、コンパイラはvarargsの仮パラメータT... elements要素を仮パラメータT[] elements要素(配列)に変換します。しかし、型消去のために、コンパイラはvarargsの仮パラメータをObject[]要素に変換します。その結果、ヒープ汚染が発生する可能性があります。

コマンド行引数の使用によるコンパイル例

コマンド行引数を指定したかのようにコンパイルするには、次の構文を使用します。

JavaCompiler javac = ToolProvider.getSystemJavaCompiler();

例では、診断を標準出力ストリームに書き込み、コマンド行から呼び出された場合にjavacコマンドが提供する終了コードを返します。

javax.tools.JavaCompilerインタフェースで他のメソッドを使えば、診断の処理やファイルの読取り元/書込み先の制御などを行えます。

旧式のインタフェース

注意:

このAPIは下位互換性の目的でのみ保持されています。新しいコードでは、Java Compiler APIを使用してください。

com.sun.tools.javac.Mainクラスには、プログラム内からコンパイラを呼び出すためのstaticメソッドが2つ用意されています。

public static int compile(String[] args);
public static int compile(String[] args, PrintWriter out);

argsパラメータは、一般にコンパイラに渡される任意のコマンド行引数を表します。

outパラメータは、コンパイラの診断の出力先を示します。

return値は、javacのexit値と同等です。

注意:

名前がcom.sun.tools.javacで始まるパッケージ(com.sun.tools.javacのサブパッケージ)に含まれるその他のすべてのクラスやメソッドは、厳密に内部用であり、いつでも変更される可能性があります。

複数ソース・ファイルのコンパイル例

この例では、greetingsパッケージ内のAloha.java、GutenTag.java、Hello.javaおよびHi.javaソース・ファイルをコンパイルします。

Oracle Solaris、LinuxおよびOS X:

% javac greetings/*.java
% ls greetings
Aloha.class         GutenTag.class      Hello.class         Hi.class
Aloha.java          GutenTag.java       Hello.java          Hi.java

Windows:

C:\>javac greetings\*.java
C:\>dir greetings
Aloha.class         GutenTag.class      Hello.class         Hi.class
Aloha.java          GutenTag.java       Hello.java          Hi.java

ユーザー・クラス・パスの指定例

前の例のいずれかのソース・ファイルの変更後、それを再コンパイルします。

Oracle Solaris、LinuxおよびOS X:

pwd
/examples
javac greetings/Hi.java

Windows:

C:\>cd
\examples
C:\>javac greetings\Hi.java

greetings.Hiは、greetingsパッケージ内の他のクラスを参照しているため、コンパイラはこれらのその他のクラスを探す必要があります。前の例は、デフォルトのユーザー・クラス・パスが、パッケージ・ディレクトリを含むディレクトリであるため機能します。現在のディレクトリに関係なく、このファイルを再コンパイルする場合、CLASSPATHを設定して、例のディレクトリをユーザー・クラス・パスに追加します。この例では-classpathオプションを使用します。

Oracle Solaris、LinuxおよびOS X:

javac -classpath /examples /examples/greetings/Hi.java

Windows:

C:\>javac -classpath \examples \examples\greetings\Hi.java

greetings.Hiを変更してバナー・ユーティリティを使用するようにした場合、このユーティリティもユーザー・クラス・パスを通じてアクセスできる必要があります。

Oracle Solaris、LinuxおよびOS X:

javac -classpath /examples:/lib/Banners.jar \
/examples/greetings/Hi.java

Windows:

C:\>javac -classpath \examples;\lib\Banners.jar ^
\examples\greetings\Hi.java

greetingsパッケージのクラスを実行するには、プログラムがgreetingsパッケージおよびgreetingsクラスが使用するクラスにアクセスする必要があります。

Oracle Solaris、LinuxおよびOS X:

java -classpath /examples:/lib/Banners.jar greetings.Hi

Windows:

C:\>java -classpath \examples;\lib\Banners.jar greetings.Hi

-source 1.7オプションにより、OldCode.javaのコンパイルにはリリース1.7(または7)のJavaプログラミング言語を使用する必要があることが指定されます。-target 1.7オプションにより、JVM 1.7と互換性のあるクラス・ファイルが生成されます。

注釈処理

javacコマンドが注釈処理を直接サポートしているため、個別の注釈処理コマンドのaptを使用する必要がなくなりました。

注釈処理のAPIは、javax.annotation.processingおよびjavax.lang.modelパッケージとそのサブパッケージ内に定義されています。

注釈処理のしくみ

-proc:noneオプションによって注釈処理が無効化されないかぎり、コンパイラは使用可能なすべての注釈プロセッサを検索します。検索パスは-processorpathオプションを使用して指定できます。パスが指定されていない場合は、ユーザー・クラス・パスが使用されます。プロセッサの検索は、META-INF/services/javax.annotation.processing.Processorという名前のサービス・プロバイダ構成ファイルを使用して行われます。このファイルは検索パス上にあります。このようなファイルには、使用するすべての注釈プロセッサの名前を、1行に1つずつ含めてください。または、-processorオプションを使用してプロセッサを明示的に指定することもできます。

コンパイラは、コマンド行のソース・ファイルやクラスをスキャンすることで、どのような注釈が存在しているかを確認し終わると、プロセッサに対して問合わせを行い、それらのプロセッサがどの注釈を処理できるのかを確認します。一致するものが見つかった場合、そのプロセッサが呼び出されます。各プロセッサは、自身が処理する注釈を要求できます。その場合、それらの注釈に対する別のプロセッサを見つける試みは行われません。すべての注釈が要求された後に、コンパイラは追加のプロセッサを検索しません。

いずれかのプロセッサによって新しいソース・ファイルが生成されると、もう1ラウンド注釈処理が行われます。新しく生成されたソース・ファイルがスキャンされ、注釈が前と同じように処理されます。以前のラウンドで呼び出されたプロセッサはすべて、後続のすべてのラウンドでも呼び出されます。これが、新しいソース・ファイルが生成されなくなるまで続きます。

あるラウンドで新しいソース・ファイルが生成されなかった場合、注釈プロセッサがあと1回だけ呼び出され、残りの処理を実行する機会が与えられます。最後に、-proc:onlyオプションが使用されなければ、コンパイラは、元のソース・ファイルと生成されたすべてのソース・ファイルをコンパイルします。

型の検索

ソース・ファイルをコンパイルするため、コンパイラは型に関する情報を必要とする場合がありますが、コマンド行で指定されるソース・ファイルに型の定義がありません。

ソース・ファイルをコンパイルするため、コンパイラは型に関する情報を必要とする場合がありますが、コマンド行で指定されるソース・ファイルに型の定義がありません。コンパイラは、ソース・ファイルで使われているクラスまたはインタフェース、拡張されているクラスまたはインタフェース、あるいは実装されているクラスまたはインタフェースすべてについて、型の情報を必要とします。これには、ソース・ファイルで明示的には言及されていなくても、継承を通じて情報を提供するクラスとインタフェースも含まれます。

たとえば、java.awt.Windowサブクラスを作成する場合、Windowの祖先のクラス(java.awt.Container、java.awt.Componentおよびjava.lang.Object)も使用していることになります。

コンパイラは、型の情報が必要になると、その型を定義しているソース・ファイルまたはクラス・ファイルを探します。まず、ブートストラップ・クラスと拡張機能クラスを検索し、続いてユーザー・クラス・パス(デフォルトではカレント・ディレクトリ)を検索します。ユーザー・クラス・パスは、CLASSPATH環境変数を設定するか、または-classpathオプションを使用して定義します。

-sourcepathオプションを設定した場合、コンパイラは指定したパスでソース・ファイルを検索します。そうでない場合、コンパイラは、ユーザー・クラス・パスでクラス・ファイルとソース・コード・ファイルの両方を検索します。

-bootclasspathオプションと-extdirsオプションを使用すると、別のブートストラップ・クラスや拡張機能クラスを指定できます。「javacのクロスコンパイル・オプション」を参照してください。

型の検索に成功したときに得られる結果は、クラス・ファイル、ソース・ファイル、またはその両方である場合があります。両方が見つかった場合、そのどちらを使用すべきかを-Xpreferオプションでコンパイラに指示できます。newerが指定された場合、コンパイラは2つのファイルの新しい方を使用します。sourceが指定された場合、コンパイラはソース・ファイルを使用します。デフォルトはnewerです。

型の検索自体によって、または-Xpreferオプションが設定された結果として、必要な型のソース・ファイルが見つかった場合、コンパイラはそのソース・ファイルを読み取り、必要な情報を取得します。デフォルトで、コンパイラは、ソース・ファイルもコンパイルします。-implicitオプションを使えばその動作を指定できます。noneを指定した場合、ソース・ファイルのクラス・ファイルは生成されません。classを指定した場合、ソース・ファイルのクラス・ファイルが生成されます。

コンパイラは、注釈処理の完了後に、ある型情報の必要性を認識しない場合があります。型情報がソース・ファイル内に見つかり、かつ-implicitオプションが指定されていない場合、コンパイラは、そのファイルが注釈処理の対象とならずにコンパイルされることを警告します。この警告を無効にするには、(そのファイルが注釈処理の対象となるように)そのファイルをコマンド行に指定するか、あるいはそのようなソース・ファイルに対してクラス・ファイルを生成すべきかどうかを-implicitオプションを使って指定します。

javap

javapコマンドは、1つ以上のクラス・ファイルを逆アセンブルする場合に使用します。

形式

javap [options] classes...

options

コマンド行オプションを指定します。「javapのオプション」を参照してください。

classes

注釈の処理対象となる、空白で区切られた1つ以上のクラスを指定します。クラス・パスで見つかるクラスを、そのファイル名、URLまたは完全修飾クラス名を使用して指定できます。

例:

path/to/MyClass.class

jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class

java.lang.Object

説明

javapコマンドは、1つ以上のクラス・ファイルを逆アセンブルします。出力は指定するオプションにより異なります。オプションを使用しない場合、javapコマンドは、渡されたクラスのprotectedおよびpublicのフィールドとメソッドを出力します。

javapコマンドは、マルチリリースJARを認識しません。コマンドのクラス・パス形式を使用すると、マルチリリースであろうとなかろうと、すべてのJARファイルのベース・エントリが表示されます。URL形式を使用すると、URL形式の引数を使用して、逆アセンブル対象となる特定のバージョンのクラスを指定できます。

javapコマンドは、その出力をstdoutに表示します。

注意:

--形式のオプションをサポートするツールでは、GNU形式のオプションで空白のかわりに等号(=)を使用して、オプションの名前とその値を区切ることができます。

javapのオプション

-help、--helpまたは-?

javapコマンドのヘルプ・メッセージを出力します。

-version

リリース情報を出力します。

-verboseまたは-v

選択されたクラスの追加情報を出力します。

-l

行番号とローカル変数表を出力します。

-public

publicクラスおよびメンバーだけを表示します。

-protected

protectedおよびpublicのクラスとメンバーだけを表示します。

-package

package、protected、publicのクラスとメンバーを表示します(デフォルト)。

-privateまたは-p

すべてのクラスとメンバーを表示します。

-c

クラスのメソッドごとに、逆アセンブルされるコード(たとえば、Javaバイト・コードで構成される命令)を出力します。

-s

内部の型シグニチャを出力します。

-sysinfo

処理されるクラスのシステム情報(パス、サイズ、日付、MD5ハッシュ)を表示します。

-constants

static final定数を表示します。

--module moduleまたは-m module

逆アセンブル対象となるクラスが含まれるモジュールを指定します。

--module-path path

アプリケーション・モジュールの参照先を指定します。

--system jdk

システム・モジュールの検索場所を指定します。

--class-path path、-classpath pathまたは-cp path

javapコマンドでユーザー・クラス・クラスの検索に使用するパスを指定します。デフォルトまたはCLASSPATH環境変数(設定されている場合)をオーバーライドします。

-bootclasspath path

ブートストラップ・クラス・ファイルの場所をオーバーライドします。

-Joption

指定したオプションをJVMに渡します。例:

javap -J-version

javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName

「javaのオプションの概要」を参照してください。

javapの例

次のHelloWorldFrameクラスをコンパイルします。

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class HelloWorldFrame extends JFrame {

String message = "Hello World!";

public HelloWorldFrame(){
setContentPane(new JPanel(){
@Override
protected void paintComponent(Graphics g) {
g.drawString(message ,15, 30);
}
});
setSize(100,100);
}
public static void main(String[] args) {
HelloWorldFrame frame = new HelloWorldFrame();
frame.setVisible(true);

}

}

javap HelloWorldFrame.classコマンドから生成される出力は、次のとおりです。

Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
java.lang.String message;
public HelloWorldFrame();
public static void main(java.lang.String[]);
}

javap -c HelloWorldFrame.classコマンドから生成される出力は、次のとおりです。

Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
java.lang.String message;

public HelloWorldFrame();
Code:
0: aload_0
1: invokespecial #1        // Method javax/swing/JFrame."<init>":()V
4: aload_0
5: ldc           #2        // String Hello World!
7: putfield      #3        // Field message:Ljava/lang/String;
10: aload_0
11: new           #4        // class HelloWorldFrame$1
14: dup
15: aload_0
16: invokespecial #5        // Method HelloWorldFrame$1."<init>":(LHelloWorldFrame;)V
19: invokevirtual #6        // Method setContentPane:(Ljava/awt/Container;)V
22: aload_0
23: bipush        100
25: bipush        100
27: invokevirtual #7        // Method setSize:(II)V
30: return

public static void main(java.lang.String[]);
Code:
0: new           #8        // class HelloWorldFrame
3: dup
4: invokespecial #9        // Method "<init>":()V
7: astore_1
8: aload_1
9: iconst_1
10: invokevirtual #10       // Method setVisible:(Z)V
13: return
}

javah

javahツールは、JavaクラスからCヘッダー・ファイルおよびソース・ファイルを生成する場合に使用します。

注意:

javahツールは、JDK 9から非推奨となり、将来のJDKリリースでは削除される可能性があります。このツールは、JDK 8でjavacに追加された-hオプションに置き換えられています。

形式

javah [options] fully-qualified-class-name ...

options

コマンド行オプションを指定します。「javahのオプション」を参照してください。

fully-qualified-class-name

Cヘッダー・ファイルおよびソース・ファイルに変換されるクラスの完全修飾された場所を指定します。

各クラスは、完全修飾名で指定する必要があり、オプションで先頭にモジュール名と続けてスラッシュ(/)を指定することもできます。例:

java.lang.Object

java.base/java.io.File

説明

javahコマンドは、ネイティブ・メソッドを実装するために必要なCヘッダーおよびソース・ファイルを生成します。作成されたヘッダーとソース・ファイルは、ネイティブ・ソース・コードからオブジェクトのインスタンス変数を参照するためにCプログラムによって使用されます。.hファイルは、対応するクラスと一致する配置を持つstruct定義を含みます。structのフィールドは、クラスのインスタンス変数に対応します。

ヘッダー・ファイルとその中で宣言される構造体の名前はクラスの名前から派生します。javahコマンドに渡されるクラスがパッケージの内部にある場合、パッケージ名はヘッダー・ファイル名と構造体名の両方の先頭に付加されます。アンダースコア(_)が名前の区切り文字として使用されます。

デフォルトでは、javahコマンドはコマンド行にリストされる各クラスのヘッダー・ファイルを作成し、現在のディレクトリにファイルを置きます。ソース・ファイルを作成するには、-stubsオプションを使用してください。1つのファイルの中に、リストされたすべてのクラスの結果を連結するには、-oオプションを使用してください。

Java Native Interface (JNI)は、ヘッダー情報やスタブ・ファイルを必要としません。引き続きjavahコマンドを使用して、JNI形式のネイティブ・メソッドに必要なネイティブ・メソッド機能プロトタイプを生成できます。javahコマンドは、JNI形式の出力を生成し、その結果を.hファイルに格納します。

javahのオプション

注意:

--形式のオプションをサポートするツールでは、GNU形式のオプションで空白のかわりに等号(=)を使用して、オプションの名前とその値を区切ることができます。

-o outputfile

コマンド行にリストされたすべてのクラスに対して、結果のヘッダーまたはソース・ファイルを連結して出力ファイルに格納します。オプション-oまたは-dのどちらか一方のみを使用できます。

-d directory

javahコマンドがヘッダー・ファイルまたはスタブ・ファイルを保存するディレクトリを設定します。オプション-dまたは-oのどちらか一方のみを使用できます。

-vまたは-verbose

詳細出力を指定し、javahコマンドが生成したファイルのステータスに関するメッセージをstdoutに出力するようにします。

-h、-helpまたは-?

javahの使用法についてのヘルプ・メッセージを出力します。

-version

javahコマンドのリリース情報を出力します。

-jni

javahコマンドがJNI形式のネイティブ・メソッド機能プロトタイプを含む出力ファイルを作成するようにします。これはデフォルトの出力であり、-jniの使用はオプションです。

-force

出力ファイルが常に書き込まれるように指定します。

--module-path path

アプリケーション・モジュールのロード元となるパスを指定します。

--system jdk

システム・モジュールの検索場所を指定します。

--class-path path、-classpath pathまたは-cp path

javahコマンドでクラスを探すために使用するパスを指定します。デフォルトまたはCLASSPATH環境変数(設定されている場合)をオーバーライドします。ディレクトリは、Oracle Solarisではコロンで区切り、Windowsではセミコロンで区切ります。pathの一般的な形式は次のようになります。

- Oracle Solaris、LinuxおよびOS X:
:your-path

例: :/home/avh/classes:/usr/local/java/classes

- Windows:
;your-path

例: ;C:\users\dac\classes;C:\tools\java\classes

便宜上、アスタリスク(*)付きのベース名を含むクラス・パス要素は、ディレクトリ内の拡張子.jarまたは.JARを持つすべてのファイルのリストを指定するのと同じと見なされます。

たとえば、ディレクトリmydirにa.jarとb.jarが含まれている場合、クラス・パス要素mydir/*はa.jar:b.JARに展開されますが、JARファイルの順番は決まっていません。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべてのJARファイルが含まれます。アスタリスク(*)からなるクラス・パス・エントリは、現在のディレクトリ内のすべてのJARファイルのリストに展開されます。CLASSPATH環境変数(定義されているとき)も同様に展開されます。クラス・パスのワイルドカード展開は、Java仮想マシン(JVM)の起動前に実行されます。System.getenv("CLASSPATH")の呼出しなどによって環境を照会しないかぎり、Javaプログラムが展開されていないワイルドカードを認識することはありません。

-bootclasspath path

ブートストラップ・クラスをロードするパスを指定します。

javadoc

javadocツールおよびそのオプションを使用して、Javaソース・ファイルからAPIドキュメントのHTMLページを生成します。

形式

javadoc [options] [packagenames] [sourcefiles] [@files]

options

空白で区切られたコマンド行オプションを指定します。「javadocのオプション」、「拡張オプション」、「標準ドックレットのオプション」および「標準ドックレットが提供する非標準オプション」を参照してください。

packagenames

ドキュメント化するパッケージの名前を空白で区切って、java.lang java.lang.reflect java.awtのように指定します。サブパッケージもドキュメント化する場合は、-subpackagesオプションを使用してパッケージを指定します。

デフォルトでは、javadocは指定されたパッケージを現在のディレクトリおよびそのサブディレクトリで検索します。パッケージを検索するディレクトリのリストを指定するには、-sourcepathオプションを使用します。

sourcefiles

ドキュメント化するJavaソース・ファイルの名前を空白で区切って、Class.java Object.java Button.javaのように指定します。デフォルトでは、javadocは指定されたクラスを現在のディレクトリで検索します。ただし、クラス・ファイルのフル・パスを指定し、ワイルドカード文字を使用することができます。たとえば、/home/src/java/awt/Graphics*.javaのように指定します。現在のディレクトリからの相対パスを指定することもできます。

@files

javadocコマンド・オプション、パッケージ名およびソース・ファイル名を任意の順序で並べたリストが含まれているファイルの名前を指定します。

説明

javadocコマンドは、一連のJavaソース・ファイルにある宣言およびドキュメンテーション・コメントを解析し、デフォルトではpublicクラス、protectedクラス、ネストされたクラス(匿名の内部クラスは除く)、インタフェース、コンストラクタ、メソッドおよびフィールドについて説明した対応するHTMLページを生成します。javadocコマンドを使用すると、APIドキュメントや、一連のソース・ファイルの実装ドキュメントを生成できます。

javadocコマンドは、パッケージ全体、個々のソース・ファイル、またはその両方に対して実行できます。パッケージ全体をドキュメント化する場合は、-subpackagesオプションを使用して、ディレクトリとそのサブディレクトリを再帰的にたどるか、パッケージ名の明示的なリストを渡すことができます。個々のソース・ファイルをドキュメント化する場合は、Javaソース・ファイル名のリストを渡します。javadocツールの使用方法の詳細は、『Java Platform, Standard Edition Javadocガイド』のjavadocの概要に関する情報を参照してください。

適合性

標準ドックレットではドキュメンテーション・コメントの内容の適合性が検証されることはなく、ドキュメンテーション・コメントのエラーを修正しようとすることもありません。javadocを実行するユーザーは、整合性のない出力やJavaScriptなどの実行可能コンテンツを含む出力を生成する際に生じる可能性のある問題について認識しておく必要があります。標準ドックレットには、開発者がドキュメンテーション・コメントの一般的な問題を検出するのに役立つdoclint機能がありますが、生成された出力を適切な適合性およびその他のチェック・ツールでチェックすることもお薦めします。

HTML5ドキュメントの適合性要件の詳細は、HTML5仕様のConformance requirementsを参照してください。Webページに関連したセキュリティ問題の詳細は、Open Web Application Security Project (OWASP)のページを参照してください。

javadocのオプション

次のオプションは、中核となるjavadocのオプションです。

注意:

--形式のオプションをサポートするツールでは、GNU形式のオプションで空白のかわりに等号(=)を使用して、オプションの名前とその値を区切ることができます。

--add-modules module(,module)*

初期モジュールに加えて解決するルート・モジュール、またはmoduleがALL-MODULE-PATHの場合はモジュール・パスのすべてのモジュールを指定します。

-bootclasspath classpathlist

非モジュラ・リリースで使用されるプラットフォーム・クラス・ファイルの場所をオーバーライドします。bootclasspathオプションは、javadocコマンドがソース・ファイルとクラス・ファイルを探すときに使用する検索パスの一部です。

classpathlistパラメータでは、次のいずれかのデリミタを使用して複数のディレクトリを区切ります。

- Oracle Solaris、LinuxおよびOS X: コロン(:)

- Windows: セミコロン(;)

-breakiterator

BreakIteratorで最初の文を計算します。最初の文は、パッケージ、クラス、またはメンバーのサマリーにコピーされ、アルファベット順のインデックスにコピーされます。BreakIteratorクラスは、英語を除くすべての言語の文の終わりを判断するために使用されます。

- 英文のデフォルトの文区切りアルゴリズム — 空白文字またはHTMLブロック・タグ(<P>など)が続くピリオドで停止します。

- ブレークイテレータ文区切りアルゴリズム — 次の語が大文字で始まる場合、空白文字が続くピリオド、疑問符、または感嘆符で停止します。このアルゴリズムでは、ほとんどの省略表記が処理されます(「The serial no. is valid」は処理されるが「Mr. Smith」は処理されない)。-breakiteratorオプションは、HTMLタグや、数字または記号で始まる文では停止しません。このアルゴリズムでは、HTMLタグに埋め込まれている場合でも、「../filename」の最後のピリオドで停止します。

--class-path path、-classpath pathまたは-cp path

javadocコマンドが参照クラスを検索するパスを指定します。参照クラスとは、ドキュメント化されるクラスとそれらのクラスによって参照されるすべてのクラスのことです。

- Oracle Solaris、LinuxおよびOS X: 複数のパスはコロン(:)で区切ります。

- Windows: 複数のパスはセミコロン(;)で区切ります。

javadocコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。classpathlistの値を指定するときは、クラス・パスのドキュメントにある指示に従ってください。

-sourcepathが省略されている場合、javadocコマンドは、-classpathを使って、ソース・ファイルとクラス・ファイルを検索します(下位互換性のため)。ソース・ファイルとクラス・ファイルを別々のパスから検索する必要がある場合は、-sourcepathと-classpathの両方を使います。

- Oracle Solaris、LinuxおよびOS X: たとえば、com.mypackageをドキュメント化する場合に、そのソース・ファイルがディレクトリ/home/user/src/com/mypackageにあり、このパッケージが/home/user/libにあるライブラリに依存しているときは、次のコマンドを使用します。

javadoc -sourcepath /home/user/src -classpath /home/user/lib com.mypackage

- Windows: たとえば、com.mypackageをドキュメント化する場合に、そのソース・ファイルがディレクトリ\user\src\com\mypackageにあり、このパッケージが\user\libにあるライブラリに依存しているときは、次のコマンドを使用します。

javadoc -sourcepath \user\lib -classpath \user\src com.mypackage

他のツールと同様に、-classpathが指定されていない場合、CLASSPATH環境変数が設定されていれば、javadocコマンドはこの環境変数を使用します。どちらも設定されていない場合、javadocコマンドは現在のディレクトリからクラスを検索します。

*というベース名を含むクラス・パス要素は、ディレクトリ内の拡張子.jarまたは.JARを持つすべてのファイルのリストを指定するのと同じとみなされます。

たとえば、ディレクトリmydirにa.jarとb.JARが含まれている場合、クラス・パス要素foo/*はA.jar:b.JARに展開されます(JARファイルの順番は不確定)。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべてのJARファイルが含まれます。*からなるクラスパス・エントリは、カレント・ディレクトリ内のすべてのJARファイルのリストに展開されます。CLASSPATH環境変数も同様に展開されます。クラス・パスのワイルドカード展開は、Java仮想マシン(JVM)の起動前に実行されます。System.getenv ("CLASSPATH")の呼出しなどによって環境を照会しないかぎり、Javaプログラムが展開されていないワイルドカードを認識することはありません。

-doclet class

代替ドックレットを使用して出力を生成ます。完全修飾名を使用してください。このドックレットにより、出力の内容と形式が定義されます。-docletオプションが使用されていない場合、javadocコマンドは、標準ドックレットを使用してデフォルトのHTML形式を生成します。このクラスには、start(Root)メソッドが含まれていなければなりません。この起動クラスへのパスは、-docletpathオプションによって定義されます。

-docletpath path

ドックレット・クラス・ファイル(-docletオプションで指定)と、それが依存するJARファイルを検索する場所を指定します。開始クラス・ファイルがJARファイル内にある場合、このオプションではそのJARファイルへのパスが指定されます。絶対パスまたは現在のディレクトリからの相対パスを指定できます。classpathlistに複数のパスまたはJARファイルを含める場合、Oracle Solarisではコロン(:)、Windowsではセミコロン(;)を使用して区切ります。目的のドックレット開始クラスがすでに検索パス内にある場合は、このオプションは不要です。

-encoding name

ソース・ファイルのエンコーディングの名前(EUCJIS/SJISなど)を指定します。このオプションが指定されていない場合は、プラットフォームのデフォルト・コンバータが使用されます。

-exclude pkglist

指定されたパッケージとそのサブパッケージを-subpackagesによって作成されたリストから無条件に除外します。過去の-subpackagesオプションの指定によって組み込まれたパッケージ、または将来組み込まれるパッケージも除外の対象となります。

次の例では、java.io、java.util、java.mathなどは組み込まれますが、java.netとjava.lang以下のパッケージは除外されます。これらの例では、java.langのサブパッケージであるjava.lang.refは除外されます。

- Oracle Solaris、LinuxおよびOS X:

javadoc -sourcepath /home/user/src -subpackages java -exclude java.net:java.lang

- Windows:

javadoc -sourcepath \user\src -subpackages java -exclude java.net:java.lang

--expand-requires value

ドキュメント化されるモジュールのセットを拡張するようjavadocツールに指示します。デフォルトでは、コマンド行で明示的に指定されたモジュールのみがドキュメント化されます。次の値がサポートされています。

- transitive: これらのモジュールの必要なすべての推移的な依存性を追加で含めます。

- all: すべての依存性を含めます。

-extdirs dirlist

拡張機能クラスが存在するディレクトリを指定します。拡張機能クラスとは、Java拡張機能メカニズムを使うすべてのクラスです。extdirsオプションは、javadocコマンドがソース・ファイルとクラス・ファイルを探すときに使う検索パスの一部です。詳細は、-classpathオプションを参照してください。dirlist内で複数のディレクトリを区切るには、Windowsではセミコロン(;)、Oracle Solarisではコロン(:)を使用します。

-helpまたは--help

オンライン・ヘルプを表示します。javadocおよびdocletのコマンド行オプションが一覧表示されます。

-Jflag

javadocコマンドを実行するJava Runtime Environment (JRE)に、flagを直接渡します。たとえば、生成ドキュメントを処理するためにシステムで32Mバイトのメモリーを確保しておく必要がある場合は、-Xmxオプションをjavadoc -J-Xmx32m -J-Xms32m com.mypackageのように呼び出します。ただし、-Xmsは初期メモリーのサイズを設定するだけなので、オプションです。これは、必要なメモリーの最小サイズがわかっている場合に便利です。

Jとflagの間には空白を入れません。

使用しているjavadocコマンドのバージョンを確認するには、-versionオプションを使用します。出力ストリームには標準ドックレットのバージョン番号が含まれます。

javadoc -J-version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

--limit-modules module (,module)*

参照可能なモジュールの領域を制限します。

-locale name

javadocコマンドがドキュメントを生成するときに使うロケールを指定します。引数には、java.util.Localeのドキュメントで説明されているロケールの名前を指定します。たとえば、en_US(英語、米国)、en_US_WIN (Windowsで使われる英語)などを指定します。

注意:

-localeオプションは、標準ドックレットまたはその他の任意のドックレットが提供する、すべてのオプションより前(左側)に指定する必要があります。そうしないと、ナビゲーション・バーが英語で表示されます。このコマンド行オプションだけは、指定する順序に依存します。

ロケールを指定すると、指定したロケールのリソース・ファイルがjavadocコマンドによって選択されて、メッセージ(ナビゲーション・バー、リストと表の見出し、ヘルプ・ファイルの目次、stylesheet.cssファイルのコメントなどの文字列)のために使われます。また、アルファベット順にソートされるリストのソート順、および最初の文の末尾を判別するための文の区切り文字も、指定したロケールによって決まります。ただし、-localeオプションは、ドキュメント化されるクラスのソース・ファイル内で指定されているドキュメンテーション・コメントのテキストのロケールを決定するものではありません。

--module module(,module)*

指定されたモジュールをドキュメント化します。

--module-path pathまたは-p path

アプリケーション・モジュールの参照先を指定します。

--module-source-path path

複数のモジュールの入力ソース・ファイルの参照先を指定します。

-package

package、protected、およびpublicのクラスとメンバーだけを表示します。

-private

すべてのクラスとメンバーを表示します。

-protected

protectedおよびpublicのクラスとメンバーだけを表示します。これはデフォルトの設定です。

-public

publicのクラスおよびメンバーのみを表示します。

-quiet

メッセージを抑制し、警告とエラーだけが表示されるようにして、これらを特定しやすくします。version文字列も抑制します。

--release release

指定されたリリースとのソース互換性を持たせます。

--show-members value

どのメンバー(フィールドやメソッド)をドキュメント化するかを指定し、valueには次のいずれかを指定できます。

- protected: デフォルト値はprotectedです。

- public: public値のみを表示します。

- package: public、protectedおよびpackageのメンバーを表示します。

- private: すべてのメンバーを表示します。

--show-module-contents value

モジュール宣言の文書粒度を指定します。指定できる値はapiまたはallです。

--show-packages value

どのモジュール・パッケージをドキュメント化するかを指定します。指定できる値はexportedまたはallパッケージです。

--show-types value

どのタイプ(クラス、インタフェースなど)をドキュメント化するかを指定し、valueには次のいずれかを指定できます。

- protected: デフォルト値です。publicおよびprotectedタイプを表示します。

- public: public値のみを表示します。

- package: public、protectedおよびpackageタイプを表示します。

- private: すべてのタイプを表示します。

-source release

受け付けるソース・コードのリリースを指定します。releaseパラメータには次の値を指定できます。javacコマンドでコードをコンパイルしたときに使用した値に対応するreleaseの値を使用します。

- リリース値: 9。javadocコマンドは、JDK 9では言語機能を含んだコードを受け付けます。-sourceオプションを使用しないと、コンパイラはデフォルトとして9の動作をします。

- リリース値: 8。javadocコマンドは、JDK 8で導入されたジェネリックスおよびその他の言語機能を含んだコードを受け付けます。

- リリース値: 7。javadocコマンドは、JDK 7で導入された、アサーションを含むコードを受け付けます。

- リリース値: 6。javadocコマンドは、JDK 6以降に導入されたアサーション、ジェネリックスまたはその他の言語機能をサポートしません。

--source-path pathまたは-sourcepath path

javadocコマンドにパッケージ名または-subpackagesオプションを渡すときに、ソース・ファイルを検索するためのパスを指定します。

- Oracle Solaris、LinuxおよびOS X: 複数のパスはコロン(:)で区切ります。

- Windows: 複数のパスはセミコロン(;)で区切ります。

javadocコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。このオプションを使用して、ドキュメント化されるソース・ファイルの位置のみでなく、それ自体はドキュメント化されないがドキュメント化されるソース・ファイルから継承されたコメントを持つソース・ファイルの位置も確認できます。

-sourcepathオプションは、javadocコマンドにパッケージ名を渡すときにだけ使用できます。javadocコマンドに渡されるソース・ファイルは、このパスからは検索されません。ソース・ファイルを検索するには、そのファイルのあるディレクトリに移動するか、各ファイルの先頭にパスを含めます。-sourcepathが省略された場合、javadocコマンドは、クラス・パスを使ってソース・ファイルを検索します(-classpathを参照)。デフォルトの-sourcepathは、クラス・パスの値です。-classpathを省略してパッケージ名をjavadocコマンドに渡すと、javadocコマンドは現在のディレクトリおよびそのサブディレクトリからソース・ファイルを検索します。

sourcepathlistには、ドキュメント化するパッケージ名のソース・ツリーのルート・ディレクトリを設定します。

- Oracle Solaris、LinuxおよびOS X:

- たとえば、com.mypackageという名前のパッケージをドキュメント化する場合に、そのソース・ファイルが/home/user/src/com/mypackage/*.javaにあるとします。次のように、sourcepathを/home/user/src (com\mypackageを含むディレクトリ)として指定し、パッケージ名を指定します。

javadoc -sourcepath /home/user/src/ com.mypackage

- sourcepathの値とパッケージ名を連結して、ドットをスラッシュ(/)に変更すると、次のように、パッケージのフル・パスになります。

/home/user/src/com/mypackage

- 2つのソース・パスを設定するには、次のようにします。

javadoc -sourcepath /home/user1/src:/home/user2/src com.mypackage

- Windows:

- たとえば、com.mypackageという名前のパッケージをドキュメント化する場合に、そのソース・ファイルが\user\src\com\mypackage\*.javaにあるとします。次のように、sourcepathを\user\src (com\mypackageを含むディレクトリ)として指定し、パッケージ名を指定します。

javadoc -sourcepath C:\user\src com.mypackage

- ソース・パスの値とパッケージ名を連結して、ドットをバックスラッシュ(\)に変えると、パッケージのフル・パスになることに注目してください。

\user\src\com\mypackage

- 2つのソース・パスを設定するには、次のようにします。

javadoc -sourcepath \user1\src;\user2\src com.mypackage

-subpackages subpkglist

ソース・ファイルから指定されたパッケージおよびそのサブパッケージ内に再帰的にドキュメントを生成します。このオプションは、ソース・コードに新しいサブパッケージを追加する際に便利です。新しいサブパッケージは自動的に組み込まれます。各package引数は、任意の最上位サブパッケージ(javaなど)または完全修飾のパッケージ(javax.swingなど)になります。ソース・ファイルを含んでいる必要はありません。どのオペレーティング・システムでも、引数はコロンで区切られます。ワイルドカードは使用できません。パッケージの検索場所を指定するには、-sourcepathを使用します。このオプションは、ソース・ツリーにあるがパッケージには属していないソース・ファイルを処理しません。

たとえば、次のコマンドは、javaおよびjavax.swingという名前のパッケージとこれらのサブパッケージ全部のドキュメントを生成します。

- Oracle Solaris、LinuxおよびOS X:

javadoc -d docs -sourcepath /home/user/src  -subpackages java:javax.swing

- Windows:

javadoc -d docs -sourcepath \user\src -subpackages java:javax.swing

--system jdk

モジュラ・リリースで使用されるシステム・モジュールの場所をオーバーライドします。

--upgrade-module-path path

アップグレード可能オプションの場所をオーバーライドします。

-verbose

javadocコマンドの実行中に詳細なメッセージを表示します。verboseオプションを指定しないと、ソース・ファイルのロード時、ドキュメントの生成時(ソース・ファイルごとに1つのメッセージ)、およびソート時にメッセージが表示されます。verboseオプションを指定すると、各Javaソース・ファイルの解析に要した時間(ミリ秒単位)を示す追加のメッセージが表示されます。

-X

非標準オプションの形式を出力して終了します。

拡張オプション

次に示すのは、javadocの拡張オプションであり、予告なく変更される可能性があります。

--add-exports module/package=other-module(,other-module)*

定義モジュールから追加モジュールに、あるいはother-moduleがALL-UNNAMEDの場合はすべての名前のないモジュールにエクスポートされると見なされるパッケージを指定します。

--add-reads module /package=other-module (,other-module)

指定のモジュールで必須と見なされる追加モジュールを指定します。other-moduleがALL-UNNAMEDの場合、名前のないモジュールが必要となります。

--patch-module module=pathlist

クラス・ファイルやリソースなどのモージュールの内容を他のバージョンで置き換えます。新しいモジュールの内容をpathlistに含めてJARまたはディレクトリのリストを指定できます。

リストの各要素は、セパレータで区切ります。

- Oracle Solaris、LinuxおよびOS X: コロン(:)

- Windows: セミコロン(;)

-Xmaxerrs number

印刷するエラーの最大数を設定します。

-Xmaxwarns number

印刷する警告の最大数を設定します。

-Xmodule:module-name

コンパイルされるクラスが属するモジュールを指定します。

-Xold

従来のjavadocツールを起動します。

標準ドックレットのオプション

次のオプションは、標準ドックレットによって提供されます。

-author

生成ドキュメントに、@authorのテキストを組み込みます。

-bottom html-code

各出力ファイルの最下部に配置するテキストを指定します。このテキストは、下部ナビゲーション・バーより下の、ページの最下部に配置されます。テキストには、HTMLタグと空白を含めることができますが、これらを含める場合は、テキストを引用符で囲まなければなりません。テキスト内の内部引用符には、エスケープ文字を使用してください。

-charset name

このドキュメント用のHTML文字セットを指定します。この名前は IANA Registry, Character Setsで指定されている望ましいMIME名である必要があります。

たとえば、javadoc -charset "iso-8859-1" mypackageを実行すると、生成されるすべてのページの先頭に次の行が挿入されます。

<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

このMETAタグについては、HTML standard (4197265 and 4137321), HTML Document Representationを参照してください。

-d directory

javadocコマンドで生成されたHTMLファイルを保存する生成先ディレクトリを指定します。-dオプションを省略すると、ファイルは現在のディレクトリに保存されます。directoryの値には、絶対ディレクトリ、または現在の作業ディレクトリからの相対ディレクトリを指定できます。javadocコマンドを実行すると生成先ディレクトリが自動的に作成されます。

- Oracle Solaris、LinuxおよびOS X: たとえば、次のコマンドでは、com.mypackageパッケージのドキュメントが生成され、その結果が/user/doc/ディレクトリに保存されます。

javadoc -d /user/doc/ com.mypackage

- Windows: たとえば、次のコマンドでは、com.mypackageパッケージのドキュメントが生成され、その結果が\user\doc\ディレクトリに保存されます。

javadoc -d \user\doc\ com.mypackage

-docencoding name

生成されるHTMLファイルのエンコーディングを指定します。この名前はIANA Registry, Character Setsで指定されている望ましいMIME名である必要があります。

-docencodingオプションを省略しながら-encodingオプションを使用した場合、生成されるHTMLファイルのエンコーディングは、-encodingオプションによって決まります。たとえば、javadoc -docencoding "iso-8859-1" mypackageのように使用します。

-docfilessubdirs

再帰的にdoc-fileサブディレクトリをコピーします

-doctitle html-code

概要ファイルの最上部の近くに配置するタイトルを指定します。titleタグに指定されたテキストは中央揃えになり、レベル1の見出しとして、上部ナビゲーション・バーのすぐ下に置かれます。titleタグには、HTMLタグと空白を含めることができますが、これらを含める場合は、タイトルを引用符で囲まなければなりません。titleタグ内の内部引用符は、エスケープする必要があります。例: javadoc -header "<b>My Library</b><br>v1.0" com.mypackage

-excludedocfilessubdir name

指定された名前のdoc-filesサブディレクトリをすべて除外します。doc-filesディレクトリの深いコピーを有効にします。コピー先には、サブディレクトリとすべての内容が再帰的にコピーされます。たとえば、ディレクトリdoc-files/example/imagesとその内容がすべてコピーされます。サブディレクトリを除外するオプションもあります。

-footer html-code

各出力ファイルの下端に配置するフッター・テキストを指定します。html-codeの値は、下部ナビゲーション・バーの右側に配置されます。html-codeの値には、HTMLタグと空白を含めることができますが、これらを含める場合は、html-codeの値を引用符で囲む必要があります。フッター内の内部引用符には、エスケープ文字を使用してください。

--frames

生成された出力でのフレームの使用を有効化します(デフォルト)。

-group namep1:p2

指定されたパッケージを「概要」ページでグループ化します。

-header html-code

各出力ファイルの上端に配置するヘッダー・テキストを指定します。ヘッダーは、上部ナビゲーション・バーの右側に配置されます。headerには、HTMLタグと空白を含めることができますが、これらを含める場合は、headerを引用符で囲まなければなりません。ヘッダー内の内部引用符には、エスケープ文字を使用してください。例: javadoc -header "<b>My Library</b><br>v1.0" com.mypackage

-helpfile filename

上部および下部のナビゲーション・バーの「ヘルプ」リンクのリンク先となるファイルを組み込みます。このオプションが指定されていない場合、javadocコマンドは、javadocコマンド内にハードコードされているヘルプ・ファイルhelp-doc.htmlを作成します。このオプションを使うと、そのデフォルトの動作をオーバーライドできます。filenameには任意の名前を指定でき、help-doc.htmlには限定されません。javadocコマンドは、このオプションでの指定に従って、ナビゲーション・バーにあるリンクに調整を加えます。例:

- Oracle Solaris、LinuxおよびOS X:

javadoc -helpfile /home/user/myhelp.html java.awt.

- Windows:

javadoc -helpfile C:\user\myhelp.html java.awt.

-html4

HTML 4.0.1出力を生成します。このオプションを使用しない場合、-html4がデフォルトです。

-html5

HTML 5出力を生成します。このオプションを使用しない場合、-html4がデフォルトです。

-keywords

HTMLキーワードの<META>タグを、クラスごとに生成されるファイルに追加します。これらのタグは、<META>タグを検索するサーチ・エンジンがページを見つける場合に役立ちます。インターネット全体を検索する検索エンジンのほとんどは<META>タグを参照しません。ページが誤用している可能性があるからです。検索を自身のWebサイトに限定している企業では、サーチ・エンジンが<META>タグを調べることによってメリットを得られます。<META>タグには、クラスの完全修飾名と、フィールドおよびメソッドの修飾されていない名前が含まれます。コンストラクタは、クラス名と同じであるため含まれません。たとえば、クラスStringは次のキーワードで開始します。

<META NAME="keywords" CONTENT="java.lang.String class">
<META NAME="keywords" CONTENT="CASE_INSENSITIVE_ORDER">
<META NAME="keywords" CONTENT="length()">
<META NAME="keywords" CONTENT="charAt()">

-link url

Javadocにより生成された既存の外部参照クラスのドキュメンテーションへのリンクを作成します。url引数は、リンク先として指定する、Javadocにより生成された外部ドキュメントを含むディレクトリの絶対URLまたは相対URLです。javadocコマンドの実行時に複数の-linkオプションを指定して、複数のドキュメントへのリンクを作成することもできます。

このディレクトリ内にpackage-listファイルが存在していなければなりません。そうでない場合は、-linkofflineオプションを使用します。javadocコマンドはpackage-listファイルからパッケージ名を読み取り、これらのパッケージをそのURLにリンクします。javadocコマンドを実行すると、作成される<A HREF>リンク内にextdocURLの値がコピーされます。したがって、extdocURLはファイルへのURLではなくディレクトリへのURLでなければなりません。urlへの絶対リンクを使用すると、ユーザーのドキュメントを任意のWebサイト上のドキュメントにリンクできます。相対位置へリンクするだけでよい場合は相対リンクを使用できます。相対リンクを使用する場合、ユーザーが渡す値は、生成先ディレクトリ(-dオプションで指定)からリンク先となるパッケージを含むディレクトリへの相対パスにする必要があります。絶対リンクを指定する場合は通常、HTTPリンクを使用します。Webサーバーを持たないファイル・システムにリンクする場合は、ファイル・リンクを使用できます。生成されたドキュメントにアクセスするすべての人が同じファイル・システムを共有している場合にのみファイル・リンクを使用します。いずれの場合も、そしてすべてのオペレーティング・システムにおいて、URLが絶対か相対か、およびhttp:かfile:かにかかわらず、URL Memo: Uniform Resource Locatorsで指定されているとおりにセパレータとしてスラッシュを使用します。

-link  http://<host>/<directory>/<directory>/.../<name>
-link file://<host>/<directory>/<directory>/.../<name>
-link <directory>/<directory>/.../<name>

-linkoffline url1 url2

このオプションは、-linkオプションのバリエーションです。どちらも、Javadocによって生成された外部参照クラスのドキュメントへのリンクを作成します。javadocコマンドがWeb接続を使ってドキュメントにアクセスできないとき、Web上のドキュメントにリンクするには、-linkofflineオプションを使用します。外部ドキュメントのpackage-listファイルにアクセスできないとき、またはこのファイルがurlで指定された場所とは異なる場所(通常、packageListLocで指定可能なローカルな場所)に存在するとき、-linkofflineオプションを使用します。url1にWorld Wide Web上でしかアクセスできない場合は、-linkofflineオプションを指定することにより、ドキュメントの生成時にjavadocコマンドがWebに接続できなければならないという制約がなくなります。さらに、ドキュメントを更新するためのワークアラウンドとしての使用も可能です。パッケージのセット全体に対してjavadocコマンドを実行したあと、変更した一部のパッケージに対して再度javadocコマンドを実行できます。こうして、更新されたファイルを、オリジナルのファイル・セットに挿入できるようにします。次に例を示します。-linkofflineオプションは引数を2つ取ります。最初の引数は<a href>リンクに組み込まれる文字列を指定する引数、2番目の引数は-linkofflineオプションに対してpackage-listの検索場所を指定する引数です。

url1またはurl2の値は、リンク先として指定する、Javadocにより生成された外部ドキュメントを含むディレクトリの絶対URLまたは相対URLです。相対値の場合、-dオプションで指定される生成先ディレクトリを基準にした、リンクされるパッケージのルートの相対パスを指定する必要があります。-linkオプションのurlを参照してください。javadocコマンドの1回の実行で、複数の-linkofflineオプションを指定できます。

-linksource

各ソース・ファイル(行番号付き)のHTMLバージョンを作成し、標準HTMLドキュメントからソース・ファイルへのリンクを追加します。リンクは、ソース・ファイル内に宣言されているクラス、インタフェース、コンストラクタ、メソッド、フィールドに対して作成されます。そうでない場合、たとえばデフォルト・コンストラクタや生成されたクラスに対しては、リンクは作成されません。

このオプションは、-public、-package、-protected、-privateの各オプションとは関係なく、privateクラス、privateフィールド、privateメソッドの本体を始めとする組み込まれたソース・ファイル内のすべての非公開実装の詳細を公開します。-privateオプションを指定しないかぎり、privateクラスやprivateインタフェースの一部には、リンクを介してアクセスできないことがあります。

各リンクは、その宣言内の識別子名の上に作成されます。たとえば、Buttonクラスのソース・コードへのリンクは、「Button」という語の上に作成されます。

public class Button extends Component implements Accessible

ButtonクラスのgetLabelメソッドのソース・コードへのリンクは、「getLabel」という語の上に作成されます。

public String getLabel()

-nocomment

主説明およびすべてのタグを含むコメント本文全体を抑制し、宣言だけを生成します。このオプションを使用すると、元は異なる目的のためだったソース・ファイルを再利用し、新しいプロジェクトの早い段階でスケルトンHTMLドキュメントを作成できます。

-nodeprecated

非推奨APIをドキュメントに生成しないようにします。このオプションを指定すると、-nodeprecatedlistオプションを指定した場合と同じ効果があり、ドキュメントの残り部分全体で非推奨APIが生成されなくなります。このオプションは、コードを記述しているとき、非推奨のコードによって気を散らされたくない場合に便利です。

-nodeprecatedlist

非推奨APIのリストを含むファイル(deprecated-list.html)、およびナビゲーション・バーのそのページへのリンクが生成されないようにします。javadocコマンドは、ドキュメントの残り部分では非推奨APIを引き続き生成します。このオプションは、非推奨APIがソース・コードに含まれておらず、ナビゲーション・バーをすっきりと見せたい場合に便利です。

--no-frames

生成された出力でのフレームの使用を無効化します。

-nohelp

出力の各ページの最上部と最下部にあるナビゲーション・バーから「ヘルプ」リンクを省略します。

-noindex

生成ドキュメントから、索引を省略します。デフォルトでは、索引が生成されます。

-nonavbar

通常は生成されるページの最上部と最下部に表示されるナビゲーション・バー、ヘッダー、およびフッターを生成しないようにします。-nonavbarオプションは、-bottomオプションには影響を与えません。-nonavbarオプションは、印刷するためだけにファイルをPostScriptまたはPDFに変換する場合など、内容だけが重要で、ナビゲーションの必要がない場合に便利です。

-noqualifier name1: name2...

出力から修飾子のリストを除外します。クラスまたはインタフェースの名前が表示される場所からパッケージ名が削除されます。

次の例では、すべてのパッケージ修飾子を省略します。-noqualifier all

次の例では、パッケージ修飾子java.langおよびjava.ioを省略します。-noqualifier java.lang:java.io

次の例では、javaで始まるパッケージ修飾子とcom.sunのサブパッケージを省略しますが、javax: -noqualifier java.*:com.sun.*は省略しません。

パッケージ修飾子が上記の動作に従って表示される場合、名前は適切に短縮されます。この規則は、-noqualifierオプションを使用したかどうかにかかわらず有効です。

-nosince

生成ドキュメントから、@sinceタグに対応する「導入されたバージョン」セクションを省略します。

-notimestamp

タイムスタンプが抑制されます。各ページ先頭近くにある、生成されたHTML内のHTMLコメントにタイムスタンプが隠されます。javadocコマンドを2つのソース・ベースで実行し、それらに対してdiffを実行する場合、-notimestampオプションを使用すると、タイムスタンプによってdiffが発生しなくなるので便利です(このオプションを使用しないと、各ページでdiffになります)。タイムスタンプには、javadocコマンドのリリース番号が含まれています。

-notree

生成されるドキュメントからクラスおよびインタフェースの階層ページを省略します。これらのページには、ナビゲーション・バーの「ツリー」ボタンからアクセスできます。デフォルトでは、階層が生成されます。

-overview filename

javadocコマンドで、filenameによって指定されたソース・ファイルから概要ドキュメント用のテキストを取得し、そのテキストを「概要」ページ(overview-summary.html)に配置するように指定します。ファイル名とともに指定される相対パスは、現在の作業ディレクトリからの相対パスです。

filenameの値とpathには、それぞれ任意の名前と場所を指定できますが、通常は、overview.htmlという名前を付けて、ソース・ツリー内の最上位のパッケージ・ディレクトリがあるディレクトリに配置します。この場所に配置すると、-sourcepathオプションによってこのファイルが指し示されるので、パッケージをドキュメント化する際にpathが不要になります。

- Oracle Solaris、LinuxおよびOS X: たとえば、java.langパッケージのソース・ツリーが/src/classes/java/lang/の場合、概要ファイルを/src/classes/overview.htmlに配置できます。

- Windows: たとえば、java.langパッケージのソース・ツリーが\src\classes\java\lang\の場合、概要ファイルは\src\classes\overview.htmlに配置できます

概要ページが作成されるのは、javadocコマンドに複数のパッケージ名を渡した場合だけです。概要ページのタイトルは、-doctitleによって設定されます。

-serialwarn

@serialタグがない場合は、コンパイル時に警告を生成します。デフォルトでは、Javadocで直列化の警告は生成されません。このオプションを使用すると、直列化の警告が表示されるので、デフォルトの直列化可能フィールドとwriteExternalメソッドを適切にドキュメント化するのに役立ちます。

-sourcetab tablength

ソース内の各タブが使用する空白文字の数を指定します。

-splitindex

索引ファイルをアルファベットごとに複数のファイルに分割し、文字ごとに1つのファイルと、アルファベット以外の記号で始まる索引エントリ用に1つのファイルを作成します。

-stylesheetfile path

代替HTMLスタイルシート・ファイルのパスを指定します。このオプションが指定されていない場合、javadocコマンドは、javadocコマンド内にハードコードされているスタイルシート・ファイルstylesheet.cssを自動的に作成します。このオプションを使うと、そのデフォルトの動作をオーバーライドできます。ファイル名には任意の名前を指定でき、stylesheet.cssには限定されません。次に例を示します。

- Oracle Solaris、LinuxおよびOS X:

javadoc -stylesheet file /home/user/mystylesheet.css com.mypackage

- Windows:

javadoc -stylesheet file C:\user\mystylesheet.css com.mypackage

-tag name:locations: header

単一の引数カスタム・タグを指定します。javadocコマンドでタグ名のスペル・チェックを行うには、ソース・コード内のすべてのカスタム・タグに-tagオプションを組み込むことが重要です。今回の実行で出力されないタグは、Xを付けて無効にします。コロン(:)が常に区切り文字になります。-tagオプションは、タグの見出しheaderを太字で出力します。その次の行には、このオプションの単一の引数で指定したテキストが続きます。ブロック・タグと同様、この引数のテキストにはインライン・タグを含めることができます。このインライン・タグも解釈されます。出力は、引数を1つ取る標準のタグ(@return、@authorなど)の出力とよく似ています。header値を省略すると、tagnameが見出しとして表示されます。

-taglet class

そのタグのドキュメントの生成に使用されるタグレットの完全修飾名を指定します。classの値には完全修飾名を使用してください。このタグレットは、カスタム・タグのテキスト引数の数も定義します。タグレットは、これらの引数を受け付け、処理し、出力を生成します。

タグレットは、ブロック・タグまたはインライン・タグで便利です。タグレットは任意の数の引数をとることができます。また、テキストを太字にする、箇条書きを作成する、テキストをファイルに書き出す、その他のプロセスを開始するなどのカスタム動作を実装できます。タグレットで指定できるのは、タグの配置場所と配置形式のみです。その他のすべての決定は、ドックレットによって行われます。タグレットを使用しても、包含クラスのリストからクラス名を削除するなどの処理は実行できません。ただし、タグのテキストをファイルに出力したり、別のプロセスをトリガーするなどの副作用は得られます。タグレットのパスを指定するには、-tagletpathオプションを使用します。以下は、生成されるページの「Parameter」と「Throws」の間に「To Do」タグレットを挿入する例です。

-taglet com.sun.tools.doclets.ToDoTaglet
-tagletpath /home/taglets
-tag return
-tag param
-tag todo
-tag throws
-tag see

-tagオプションのかわりに-tagletオプションを使用することもできますが、読みにくくなる場合があります。

-tagletpath tagletpathlist

タグレットのクラス・ファイルの検索パスを指定します。tagletpathlistには、コロン(:)で区切って複数のパスを含めることができます。javadocコマンドは、指定されたパス以下のすべてのサブディレクトリを検索します。

-top html-code

各出力ファイルの最上部に配置するテキストを指定します。

-use

クラスおよびパッケージの使用ページを作成します。ドキュメント化されるクラスおよびパッケージごとに1つの「使用」ページを組み込みます。このページには、その特定のクラスまたはパッケージのAPIを使っているパッケージ、クラス、メソッド、コンストラクタ、およびフィールドが記述されます。たとえば、クラスCを例にとると、クラスCを使っているものとしては、Cのサブクラス、Cとして宣言されているフィールド、Cを返すメソッド、および、型Cのパラメータを持つメソッドとコンストラクタがあります。たとえば、String型の「使用」ページを見てみましょう。java.awt.FontクラスのgetNameメソッドはタイプStringを返すため、getNameメソッドはStringを使用し、getNameメソッドはStringの「使用」ページに表示されます。ドキュメント化されるのはAPIの使用のみで、実装はドキュメント化されません。あるメソッドが、その実装の中でStringを使用していても、引数として文字列を取ったり、文字列を返したりしない場合は、Stringの使用とは見なされません。生成された「使用」ページにアクセスするには、目的のクラスまたはパッケージに移動し、ナビゲーション・バーの「使用」リンクをクリックします。

-version

生成ドキュメントに、バージョン・テキストを組み込みます。このテキストは、デフォルトでは省略されます。使用しているjavadocコマンドのバージョンを確認するには、-J-versionオプションを使用します。

-windowtitle title

HTMLの<title>タグに配置するタイトルを指定します。titleタグに指定されたテキストは、ウィンドウのタイトルや、このページに対して作成されたブラウザのブックマーク(お気に入り)に表示されます。このタイトルにはHTMLタグを含めないでください。タイトルにHTMLタグが含まれていると、ブラウザがタグを正しく解釈できません。titleタグ内の内部引用符には、エスケープ文字を使用してください。-windowtitleオプションが省略されている場合、javadocコマンドは、-windowtitleオプションのかわりに-doctitleオプションの値を使います。例: javadoc -windowtitle "My Library" com.mypackage

標準ドックレットが提供する非標準オプション

次に示すのは、標準ドックレットによって提供される非標準オプションであり、予告なく変更される可能性があります。

-Xdoclint

Javadocコメントの問題に関する推奨チェックを有効にします。

-Xdoclint:(all|none|[-]group)

不正な参照、アクセシビリティの欠如、Javadocコメントの欠落に関する特定のチェックを有効または無効にし、無効なJavadoc構文およびHTMLタグの欠落についてエラーを報告します。

javadocコマンドでこのオプションを使用すると、生成された出力に含まれているすべてのドキュメンテーション・コメントをチェックできます。生成される出力に含める項目は、標準オプション-public、-protected、-packageおよび-privateを使用して選択できます。

-Xdoclintを有効にすると、javacコマンドに似たメッセージによって問題が報告されます。javadocコマンドは、メッセージ、ソース行のコピー、およびエラーが検出された正確な位置を指すキャレットを出力します。メッセージは警告またはエラーです。どちらになるかは、その重要度、および生成されたドキュメントに対してバリデータを実行した場合にエラーを招く可能性によって決まります。たとえば、不正な参照やJavadocコメントの欠落は、javadocコマンドが無効なHTMLを生成する原因にはならないため、このような問題は警告として報告されます。構文エラーやHTML終了タグの欠落は、javadocコマンドが無効な出力を生成する原因になるため、このような問題はエラーとして報告されます。

-Xdoclintオプションは、リクエストされたマークアップに基づいて入力コメントを有効にします。

デフォルトでは、-Xdoclintオプションは有効になっています。無効にするには、-Xdoclint:noneオプションを使用します。

次のオプションにより、-Xdoclintオプションで報告する項目が変更されます。

- -Xdoclint none: -Xdoclintオプションを無効にします

- -Xdoclint group: groupのチェックを有効にします

- -Xdoclint all: すべてのグループのチェックを有効にします

- -Xdoclint all,-group: groupのチェックを除くすべてのチェックを有効にします

変数groupは、次のいずれかの値を取ります。

- accessibility: アクセシビリティ・チェッカで検出されるような問題をチェックします(たとえば、<table>タグにキャプション属性やサマリー属性が指定されていない場合)。

- html: 高レベルのHTMLの問題を検出します(ブロック要素がインライン要素の内側にある、終了タグを必要とする要素が閉じていない、など)。このルールは、選択された標準ドックレットhtml出力生成に基づいて、HTML4仕様およびHTML5仕様から導出されます。このタイプのチェックを使用すると、一部のブラウザで意図したとおりに解釈されない可能性があるHTMLの問題をjavadocコマンドで検出できます。

- missing : Javadocコメントまたはタグの欠落をチェックします(たとえば、コメントやクラスが見つからない、メソッドに@returnタグや類似のタグがない、など)。

- reference : JavadocタグからJava API要素を参照する場合の問題をチェックします(たとえば、@seeに項目が見つからない、@paramの後の名前が正しくない、など)。

- syntax : 低レベルの問題をチェックします。たとえば、山カッコ(<と>)やアンパサンド(&)がエスケープされていない、Javadocタグが無効である、などです。

-Xdoclintオプションは複数回指定できるため、複数のカテゴリのエラーと警告をチェックできます。または、前述のオプションを使用して、エラーと警告のカテゴリを複数指定することもできます。たとえば、ファイルfilenameのHTML、構文、およびアクセシビリティの問題をチェックするには、次のコマンドのどちらかを使用します。

javadoc -Xdoclint:html -Xdoclint:syntax -Xdoclint:accessibility filename
javadoc -Xdoclint:html,syntax,accessibility filename

注意:

javadocコマンドでは、これらのチェックの完全性は保証されません。具体的に言うと、これは完全なHTMLコンプライアンス・チェッカではありません。-Xdoclintオプションの目的は、一般的なエラーの大部分をjavadocコマンドで報告できるようにすることです。

javadocコマンドは、無効な入力を修正しようとはせず、報告するだけです。

-Xdoclint/package:([-]) packages

特定のパッケージのチェックを有効または無効にします。packagesはカンマで区切られたパッケージ指定子のリストです。パッケージ指定子は、パッケージの修飾名またはパッケージ名の接頭辞の後に*を指定(指定されたパッケージのすべてのサブパッケージまで拡張)したものです。パッケージ指定子の前に-を指定すると、指定したパッケージに関するチェックを無効にできます。

-Xdocrootparent url

Javadocコメント内の/..が後に続く@docRootのすべてをurlで置換します。

java

javaコマンドは、Javaアプリケーションを起動する場合に使用できます。

形式

クラスを実行する場合:

java [options] mainclass [args...]

JARファイルを実行する場合:

java [options] -jar jarfile [args...]

モジュールのメイン・クラスを実行する場合:

java [options] [--module-path modulepath] --module module[/mainclass] [args...]

options

空白で区切られたコマンド行オプションを指定します。使用可能なオプションの説明は、「javaのオプションの概要」を参照してください。

mainclass

起動するクラスの名前を指定します。classnameの後のコマンド行エントリは、メイン・メソッド用の引数です。

jarfile

呼び出されるJavaアーカイブ(JAR)ファイルの名前を指定します。-jarオプションと一緒にのみ使用されます。

modulepath

セミコロン(;)で区切られたディレクトリのリスト(各ディレクトリはモジュールのディレクトリ)へのパスを指定します。--module-pathオプションと一緒にのみ使用されます。「javaの標準オプション」を参照してください。

module[/mainclass]

解決する初期moduleの名前を指定します。また、moduleで指定されていない場合は、実行するmainclassの名前を指定します。-mまたは--moduleオプションと一緒にのみ使用されます。「javaの標準オプション」を参照してください。

args

空白で区切られたmainメソッドに渡される引数を指定します。

注意:

メイン・クラス(-jar jarfile、-mまたは--module module/mainclass)の後の引数は、メイン・クラスに引数として渡されます。

説明

javaコマンドはJavaアプリケーションを起動します。これは、Java Runtime Environment (JRE)を起動し、指定されたクラスをロードし、そのクラスのmain()メソッドを呼び出すことによって行われます。このメソッドは、publicおよびstaticとして宣言する必要があり、値を返すことができず、String配列をパラメータとして受け付ける必要があります。メソッド宣言の形式は次のとおりです。

public static void main(String[] args)

JDK 9では、新しいランチャ環境変数JDK_JAVA_OPTIONSが導入されており、その内容がjavaランチャの実際のコマンド行の先頭に追加されます。「JDK_JAVA_OPTIONSランチャ環境変数の使用方法」を参照してください。

javaコマンドは、main()メソッドがあるか、javafx.application.Applicationを拡張するクラスをロードすることによって、JavaFXアプリケーションを起動するのに使用できます。後者の場合、ランチャはApplicationクラスのインスタンスを構築し、そのinit()メソッドを呼び出し、次にstart(javafx.stage.Stage)メソッドを呼び出します。

デフォルトでは、javaコマンドのオプションでない最初の引数は呼び出されるクラスの完全修飾名です。-jarオプションを指定した場合、その引数はアプリケーションのクラス・ファイルとリソース・ファイルを含むJARファイルの名前です。起動クラスはそのマニフェスト・ファイルのMain-Classマニフェスト・ヘッダーによって示される必要があります。

クラス・ファイル名またはJARファイル名の後にある引数は、main()メソッドに渡されます。

Windows: javawコマンドは、javawにコンソール・ウィンドウが関連付けられていないこと以外は、javaコマンドと同じです。javawは、コマンド・プロンプト・ウィンドウを表示する必要がないときに使用します。ただし、javawランチャは、起動に失敗すると、エラー情報を示すダイアログ・ボックスを表示します。

JDK_JAVA_OPTIONSランチャ環境変数の使用方法

JDK_JAVA_OPTIONSは、その内容をコマンド行から解析されるオプションの先頭に追加します。JDK_JAVA_OPTIONS環境変数の内容は、空白文字(isspace()で指定)で区切られた引数のリストです。これらは、javaランチャに渡されるコマンド行引数の先頭に追加されます。環境変数のエンコーディング要件は、システムのjavaコマンド行と同じです。JDK_JAVA_OPTIONS環境変数の内容は、コマンド行に指定した場合と同じ方法で処理されます。

一重引用符(')または二重引用符(")を使用して、空白文字が含まれる引数を囲むことができます。開始引用符と対応する最初の終了引用符の間の内容すべてが引用符のペアを除いて保存されます。対応する引用符が見つからなかった場合、ランチャはエラー・メッセージを発行して停止します。@filesは、コマンド行に指定するとサポートされます。ただし、@files内と同様、ワイルドカードの使用はサポートされません。JDK_JAVA_OPTIONSの動作の誤用の可能性を緩和するために、メイン・クラスを指定するオプション(-jarなど)またはメイン・クラスを実行せずにjavaランチャを終了させるオプション(-hなど)は環境変数で指定できません。このようなオプションのいずれかが環境変数に指定されている場合、ランチャはエラー・メッセージを発行して停止します。JDK_JAVA_OPTIONSを設定すると、ランチャはメッセージをstderrにリマインダとして出力します。

例:

export JDK_JAVA_OPTIONS='-g @file1 -Dprop=value @file2 -Dws.prop="white spaces”'
$ java -Xint @file3

これは次のコマンド行と同等です。

java -g @file1 -Dprop=value @file2 -Dws.prop="white spaces" -Xint @file3

javaのオプションの概要

javaコマンドは、次のカテゴリに分類される幅広いオプションをサポートしています。

- javaの標準オプション: Java仮想マシン(JVM)のすべての実装でサポートされることが保証されているオプション。これらは、JREのバージョンの確認、クラス・パスの設定、詳細出力の有効化などの一般的なアクションに使用します。

- javaの追加オプション: Java HotSpot仮想マシンに固有の汎用オプション。これらは、すべてのJVM実装でサポートされている保証はなく、変更されることがあります。これらのオプションは-Xから始まります。

拡張オプションは、不用意に使用しないことをお薦めします。これらは、特定のシステム要件があり、システム構成パラメータに特権付きアクセスを必要とするようなJava HotSpot仮想マシンの操作の特定の領域のチューニングに使用するための開発者用オプションです。「パフォーマンス・チューニングの例」に、パフォーマンス・チューニングの例をいくつか示します。これらのオプションは、すべてのJVM実装でサポートされている保証はなく、変更されることがあります。拡張オプションは-XXから始まります。

- javaの拡張ランタイム・オプション: Java HotSpot VMのランタイム動作を制御します。

- javaの拡張JITコンパイラ・オプション: Java HotSpot VMによって実行されるJust-in-Time (JIT)動的コンパイルを制御します。

- javaの拡張保守性オプション: システム情報の収集および詳細デバッグの実行を有効にします。

- javaの拡張ガベージ・コレクション・オプション: Java HotSpotによってガベージ・コレクション(GC)がどのように実行されるかを制御します

ブール・オプションは、デフォルトで無効にされている機能を有効にするか、デフォルトで有効にされている機能を無効にするために使用します。このようなオプションはパラメータを必要としません。ブール-XXオプションは、プラス記号を使用して有効にし(-XX:+OptionName)、マイナス記号を使用して無効にします(-XX:-OptionName)。

引数を必要とするオプションの場合、引数とオプション名はスペース、コロン(:)または等号(=)で区切るか、またはオプションの後に直接引数を続けることもできます(正確な構文はオプションごとに異なります)。バイト単位のサイズを指定する必要がある場合は、接尾辞を使用しないか、またはキロバイト(KB)の場合には接尾辞kまたはK、メガバイト(MB)の場合にはmまたはM、ギガバイト(GB)の場合にはgまたはGを使用できます。たとえば、サイズを8Gバイトに設定するには、引数として、8g、8192m、8388608kまたは8589934592と指定できます。パーセンテージを指定する必要がある場合は、0から1までの数値を使用します。たとえば、25%の場合は0.25と指定します。

次の各項では、JDK 9で廃止、非推奨および削除されたオプションについて説明します。

- 廃止されたjavaオプション: 使用できますが、無視されます。使用すると警告が発行されます。

- 非推奨のjavaオプション: 使用でき、処理されます。使用すると警告が発行されます。

- 削除されたjavaオプション: JDK 9で削除されました。使用するとエラーになります。

javaの標準オプション

これらは、JVMのすべての実装でサポートされる最も一般的に使用されるオプションです。

注意:

長形式のオプションの引数を指定するには、--name=valueまたは--name valueを使用できます。

-agentlib:libname[=options]

指定したネイティブ・エージェント・ライブラリをロードします。ライブラリ名の後に、ライブラリに固有のオプションのカンマ区切りのリストを使用できます。

- Oracle Solaris、LinuxおよびOS X: オプション-agentlib:fooが指定された場合、JVMはlibfoo.soという名前のライブラリを、LD_LIBRARY_PATHシステム変数(OS Xではこの変数はDYLD_LIBRARY_PATH)で指定された場所にロードしようとします。

- Windows: オプション-agentlib:fooが指定された場合、JVMはfoo.dllという名前のライブラリを、PATHシステム変数で指定された場所にロードしようとします。
次の例では、ava Debug Wire Protocol (JDWP)ライブラリをロードし、ポート8000でソケット接続をリスニングし、メイン・クラスのロード前にJVMを一時停止する方法を示しています。

-agentlib:jdwp=transport=dt_socket,server=y,address=8000

-agentpath:pathname[=options]

絶対パス名で指定されたネイティブ・エージェント・ライブラリをロードします。このオプションは-agentlibと同等ですが、ライブラリのフル・パスとファイル名を使用します。

--class-path classpath、-classpath classpathまたは-cp classpath

クラス・ファイルを検索するディレクトリ、JARアーカイブおよびZIPアーカイブのセミコロン(;)で区切られたリスト。

classpathを指定すると、CLASSPATH環境変数の設定がオーバーライドされます。classpathオプションを使用せず、classpathを設定していない場合、ユーザー・クラス・パスは現在のディレクトリ(.)になります。

便宜上、アスタリスク(*)のベース名を含むクラス・パス要素は、ディレクトリ内の拡張子.jarまたは.JARを持つすべてのファイルのリストを指定するのと同じと見なされます。Javaプログラムはこの2つの呼出しの違いを認識できません。たとえば、ディレクトリmydirにa.jarとb.JARが含まれている場合、クラス・パス要素mydir/*はA.jar:b.JARに展開されますが、JARファイルの順番は決まっていません。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべての.jar ファイルが含まれます。アスタリスク(*)からなるクラス・パス・エントリは、現在のディレクトリ内のすべてのjarファイルのリストに展開されます。CLASSPATH環境変数(定義されているとき)も同様に展開されます。クラス・パス・ワイルドカード拡張は、Java VMの開始前に行われます。System.getenv("CLASSPATH")の呼出しなどによって環境を照会しないかぎり、Javaプログラムが展開されていないワイルドカードを認識することはありません。

--disable-@files

引数ファイル内を含めコマンド行の任意の場所で使用して、@filenameがそれ以上展開されないようにすることができます。このオプションは、オプションの後にある@argfilesを展開できないようにします。

--module-path modulepath...または-p modulepath

ディレクトリのセミコロン(;)区切りのリストでディレクトリを検索します。各ディレクトリは、モジュールのディレクトリです。

--upgrade-module-path modulepath...

ディレクトリのセミコロン(;)区切りのリストでディレクトリを検索します。各ディレクトリは、ランタイム・イメージのアップグレード可能モジュールを置換するモジュールのディレクトリです。

--add-modules module[,module...]

初期モジュールに加えて解決するルート・モジュールを指定します。また、moduleは、ALL-DEFAULT、ALL-SYSTEMおよびALL-MODULE-PATHのいずれかにすることもできます。

--list-modules

参照可能なモジュールをリストして終了します。

-d moduleまたは--describe-module module

指定されたモジュールの説明を表示して終了します。

--dry-run

VMを作成しますが、メイン・メソッドは実行しません。この--dry-runオプションは、モジュール・システム構成などのコマンド行オプションの検証に使用すると便利なことがあります。

--validate-modules

すべてのモジュールを検証して終了します。このオプションは、モジュール・パス上のモジュールで競合などのエラーを検出する場合に役立ちます。

-Dproperty=value

システム・プロパティの値を設定します。property変数はプロパティの名前を表す空白なしの文字列です。value変数はプロパティの値を表す文字列です。valueが空白のある文字列の場合、それを引用符で囲みます(-Dfoo="foo bar"など)。

-disableassertions[:[packagename]...|:classname]または-da[:[packagename]...|:classname]

アサーションを無効にします。デフォルトでは、すべてのパッケージとクラスでアサーションは無効になっています。引数なしで、-disableassertions (-da)は、すべてのパッケージとクラスでアサーションを無効にします。...で終わるpackagename引数を指定すると、スイッチは指定されたパッケージとサブパッケージ内でアサーションを無効にします。引数が...のみの場合、スイッチは現在の作業ディレクトリにある名前のないパッケージ内でアサーションを無効にします。classname引数を指定すると、スイッチは指定されたクラス内でアサーションを無効にします。

-disableassertions (-da)オプションは、すべてのクラス・ローダーおよびシステム・クラス(クラス・ローダーを持たない)に適用されます。このルールには1つの例外があります。引数なしでオプションが指定された場合、システム・クラスには適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に無効にできます。-disablesystemassertionsオプションは、すべてのシステム・クラスでアサーションを無効にできます。特定のパッケージまたはクラスでアサーションを明示的に有効にするには、-enableassertions (-ea)オプションを使用します。両方のオプションを同時に使用することはできません。たとえば、com.wombat.fruitbatパッケージ(およびすべてのサブパッケージ)内でアサーションを有効にし、com.wombat.fruitbat.Brickbatクラス内では無効にして、MyClassアプリケーションを実行するには、次のコマンドを使用します。

java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass

-disablesystemassertionsまたは-dsa

すべてのシステム・クラス内でアサーションを無効にします。

-enableassertions[:[packagename]...|:classname]または-ea[:[packagename]...|:classname]

アサーションを有効にします。デフォルトでは、すべてのパッケージとクラスでアサーションは無効になっています。引数なしで、-enableassertions (-ea)は、すべてのパッケージとクラスでアサーションを有効にします。...で終わるpackagename引数を指定すると、スイッチは指定されたパッケージとすべてのサブパッケージ内でアサーションを有効にします。引数が...のみの場合、スイッチは現在の作業ディレクトリにある名前のないパッケージ内でアサーションを有効にします。classname引数を指定すると、スイッチは指定されたクラス内でアサーションを有効にします。

-enableassertions (-ea)オプションは、すべてのクラス・ローダーおよびシステム・クラス(クラス・ローダーを持たない)に適用されます。このルールには1つの例外があります。引数なしでオプションが指定された場合、システム・クラスには適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に有効にできます。-enablesystemassertionsオプションは、すべてのシステム・クラスでアサーションを有効にするために個別のスイッチを提供します。特定のパッケージまたはクラスでアサーションを明示的に無効にするには、-disableassertions (-da)オプションを使用します。単一のコマンドにこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。たとえば、com.wombat.fruitbatパッケージ(およびすべてのサブパッケージ)内でのみアサーションを有効にし、com.wombat.fruitbat.Brickbatクラス内では無効にして、MyClassアプリケーションを実行するには、次のコマンドを使用します。

java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass

-enablesystemassertionsまたは-esa

すべてのシステム・クラス内でアサーションを有効にします。

-helpまたは-?

ヘルプ・メッセージをエラー・ストリームに出力します。

--help

ヘルプ・メッセージを出力ストリームに出力します。

-jar filename

JARファイルにカプセル化されたプログラムを実行します。filename引数は、アプリケーションの開始位置として機能するpublic static void main(String[] args)メソッドによってクラスを定義する、Main-Class:classnameの形式の行を含むマニフェストのあるJARファイルの名前です。-jarオプションを使用すると、指定したJARファイルがすべてのユーザー・クラスのソースになり、他のクラス・パスの設定は無視されます。JARファイルを使用している場合は、「jar」を参照してください。

-javaagent:jarpath[=options]

指定したJavaプログラミング言語エージェントをロードします。

--show-versionまたは-showversion

バージョン情報を表示してアプリケーションの実行を続行します。このオプションは、-versionオプションと同等ですが、後者はJVMにバージョン情報の表示後終了するように指示する点が異なります。

--show-module-resolution

起動時にモジュール解決出力を表示します。

-splash:imgname

imgnameで指定されたイメージを含むスプラッシュ画面を表示します。HiDPIスケールのイメージが自動的にサポートされて、使用可能な場合は使用されます。スケーリングされないイメージのファイル名(image.extなど)を常に引数として-splashオプションに渡す必要があります。指定された最も適切なスケーリング済のイメージが自動的に選択されます。

たとえば、アプリケーションの起動時に、imagesディレクトリのsplash.gifファイルを表示するには、次のオプションを使用します。

-splash:images/splash.gif

-verbose:class

ロードされる各クラスに関する情報を表示します。

-verbose:gc

各ガベージ・コレクション(GC)イベントに関する情報を表示します。

-verbose:jni

ネイティブ・メソッドおよびその他のJava Native Interface (JNI)アクティビティの使用に関する情報を表示します。

-verbose:module

使用中のモジュールに関する情報を表示します。

--versionまたは-version

バージョン情報を表示して終了します。このオプションは、-showversionオプションと同等ですが、後者はJVMにバージョン情報の表示後終了するように指示しない点が異なります。

-X

追加オプションに関するヘルプをエラー・ストリームに出力します。

--help-extra

追加オプションに関するヘルプを出力ストリームに出力します。

@argument files

javaコマンドで使用される、先頭に@が付く引数ファイルを1つ以上指定します。クラスパスで必要となる.jarファイルのため、javaコマンド行が非常に長くなることは珍しいことではありません。@argument filesオプションにより、シェル拡張の後かつ引数処理の前にランチャで引数ファイルの内容を展開できるようになることで、コマンド行の長さに関する制限を克服できます。引数ファイルの内容が展開されるのは、そうしないと、-Xdisable-@filesオプションが検出されるまでコマンド行に指定されるためです。

また、引数ファイルには、メイン・クラス名およびすべてのオプションを含めることもできます。引数ファイルにjavaコマンドに必要なオプションがすべて含まれている場合、コマンド行は単に次のようになります。

java @argument files

@argument filesの使用方法の説明および例は、「javaのコマンド行引数ファイル」を参照してください。

javaの追加オプション

次のjavaオプションは、Java HotSpot仮想マシンに固有の汎用オプションです。

-Xbatch

バックグラウンド・コンパイルを無効にします。デフォルトで、JVMは、メソッドをバックグラウンド・タスクとしてコンパイルし、バックグラウンド・コンパイルが終了するまでインタプリタ・モードでメソッドを実行します。-Xbatchフラグは、バックグラウンド・コンパイルを無効にするため、すべてのメソッドのコンパイルが完了するまでフォアグラウンド・タスクとして処理されます。このオプションは-XX:-BackgroundCompilationと同等です。

-Xbootclasspath/a:directories| zip|JAR files

デフォルトのブートストラップ・クラス・パスの最後に追加するディレクトリ、JARファイルおよびZIPアーカイブのリストを指定します。

Oracle Solaris、LinuxおよびOS X: コロン(:)でこのリストのエントリを区切ります。

Windows: セミコロン(:)でこのリストのエントリを区切ります。

-Xcheck:jni

Java Native Interface (JNI)機能に対して追加チェックを行います。具体的には、それはJNI要求を処理する前に、JNI関数に渡されるパラメータと、実行時環境データを検証します。また、JNIコール間の保留中の例外もチェックします。無効なデータが見つかった場合は、ネイティブ・コードに問題があることを示しており、その場合JVMでは回復不能なエラーが発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。

-Xcomp

最初の呼出しで、メソッドのコンパイルを強制的に実行します。デフォルトで、クライアントVM (-client)は1,000回の解析対象メソッドの呼出しを実行し、サーバーVM (-server)は10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。-Xcompオプションを指定すると、解析対象メソッドの呼出しを無効にするため、効率性と引き換えにコンパイルのパフォーマンスが向上します。-XX:CompileThresholdオプションを使用して、コンパイル前の解析対象メソッドの呼出し数を変更することもできます。

-Xdebug

何も行いません。下位互換性を維持するために提供されています。

-Xdiag

追加の診断メッセージを表示します。

-Xfuture

クラスファイル形式の仕様への厳密な準拠を適用するクラスファイル形式の厳密なチェックを有効にします。開発者は、新しいコードを開発する際にこのフラグを使用する必要があります。将来のリリースでは、より厳密なチェックがデフォルトになる可能性があります。

-Xint

インタプリタ専用モードでアプリケーションを実行します。ネイティブ・コードへのコンパイルは無効になり、すべてのバイト・コードがインタプリタによって実行されます。Just-In-Time (JIT)コンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。

-Xinternalversion

-versionオプションよりも詳しいJVMバージョン情報を表示して、終了します。

-Xloggc:option

JVM統合ロギング・フレームワークを有効にします。GCステータスをタイムスタンプとともにファイルに記録します。

-Xlog:option

Java仮想マシン(JVM)統合ロギング・フレームワークを使用したロギングを構成または有効にします。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-Xmixed

ネイティブ・コードにコンパイルされるホット・メソッドを除くすべてのバイトコードをインタプリタによって実行します。

-Xmn size

Young世代(ナーサリ)のヒープの初期および最大サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。ヒープのYoung世代領域は新しいオブジェクトに使用されます。この領域では他の領域よりも頻繁にGCが実行されます。Young世代のサイズが小さすぎる場合は、大量のマイナー・ガベージ・コレクションが実行されます。そのサイズが大きすぎる場合は、フル・ガベージ・コレクションのみが実行されますが、これは完了までに長時間かかることがあります。Young世代のサイズをヒープ・サイズ全体の25%から50%の間に維持することをお薦めします。次の例では、様々な単位を使用して、Young世代の初期および最大サイズを256Mバイトに設定する方法を示します。

-Xmn256m
-Xmn262144k
-Xmn268435456

Young世代のヒープの初期サイズと最大サイズの両方を設定する-Xmnオプションの代わりに、-XX:NewSizeを使用して、初期サイズを設定し、-XX:MaxNewSizeを使用して、最大サイズを設定できます。

-Xms size

ヒープの初期サイズ(バイト単位)を設定します。この値は、1024の倍数で1Mバイトより大きくなければなりません。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。次の例では、様々な単位を使用して、割り当てられたメモリーのサイズを6Mバイトに設定する方法を示します。

-Xms6291456
-Xms6144k
-Xms6m

このオプションを設定しない場合、初期サイズは、Old世代とYoung世代に割り当てられたサイズの合計として設定されます。Young世代のヒープの初期サイズは、-Xmnオプションまたは-XX:NewSizeオプションを使用して設定できます。

-Xmx size

メモリー割当てプールの最大サイズ(バイト単位)を指定します。この値は、1024の倍数で、2Mバイトより大きくなければなりません。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。サーバー配備の場合、-Xmsと-Xmxが同一の値に設定されていることがよくあります。次の例では、様々な単位を使用して、割り当てられたメモリーの最大許容サイズを80Mバイトに設定する方法を示します。

-Xmx83886080
-Xmx81920k
-Xmx80m

-Xmxオプションは-XX:MaxHeapSizeと同等です。

-Xnoclassgc

クラスのガベージ・コレクション(GC)を無効にします。これによりいくらかのGC時間が節約され、アプリケーション実行時の割込みが短くなります。起動時に-Xnoclassgcを指定すると、GC時にアプリケーションのクラス・オブジェクトがそのままの状態にされ、常に有効であると見なされます。これにより、より多くのメモリーが永続的に占有されることになるため、慎重に使用しないと、メモリー不足の例外がスローされる可能性があります。

-Xprof

実行中のプログラムのプロファイルを生成し、プロファイル・データを標準出力に出力します。このオプションは、プログラム開発で役立つユーティリティとして提供されており、本番稼動システムでの使用を目的としたものではありません。

-Xrs

JVMによるオペレーティング・システム・シグナルの使用を減らします。シャットダウン・フックにより、JVMが突然終了した場合でも、シャットダウン時にユーザー・クリーン・アップ・コード(データベース接続のクローズなど)を実行して、Javaアプリケーションの正常なシャットダウンができるようになりました。

- Oracle Solaris、LinuxおよびOS X:

- JVMは、シグナルをキャッチすることによって、異常終了のためのシャットダウン・フックを実装します。JVMは、SIGHUP、SIGINT、およびSIGTERMを使用して、シャットダウン・フックの実行を開始します。

- JVMは、シグナルをキャッチすることによって、異常終了のためのシャットダウン・フックを実装します。JVMは、SIGHUP、SIGINT、およびSIGTERMを使用して、シャットダウン・フックの実行を開始します。

- JVMを埋め込んでいるアプリケーションがSIGINTやSIGTERMなどのシグナルを頻繁にトラップする必要があると、JVMのシグナル・ハンドラの処理に支障が出る可能性があります。-Xrsオプションを使用すると、この問題に対処できます。-Xrsを使用すると、SIGINT、SIGTERM、SIGHUPおよびSIGQUITに対するシグナル・マスクはJVMによって変更されず、これらのシグナルに対するシグナル・ハンドラはインストールされません。

- Windows:

- JVMは、コンソール制御イベントを監視して予期しない終了のシャットダウン・フックを実装します。具体的には、JVMは、シャットダウン・フック処理を開始するコンソール制御ハンドラを登録し、CTRL_C_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENTおよびCTRL_SHUTDOWN_EVENTに対してTRUEを返します。

- JVMは、デバッグ用のスレッド・スタックをダンプする機能を実現するためにも、同様のメカニズムを使用します。JVMは、スレッド・ダンプを実行するためにCTRL_BREAK_EVENTを使用します。

- JVMがサービス(Webサーバー用のサーブレット・エンジンなど)として実行されている場合、CTRL_LOGOFF_EVENTを受け取ることはできますが、オペレーティング・システムが実際にはプロセスを終了しないため、シャットダウンを開始しないでください。このような干渉の可能性を避けるため、-Xrsオプションを使用できます。-Xrsオプションを使用すると、JVMは、コンソール制御ハンドラをインストールしないため、CTRL_C_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENTまたはCTRL_SHUTDOWN_EVENTの監視や処理を行わないことを意味します。

-Xrsを指定した場合は、2つの影響があります。

- Oracle Solaris、LinuxおよびOS X: SIGQUITによるスレッド・ダンプは使用できません。

- Windows: [Ctrl]+[Break]によるスレッド・ダンプは使用できません。

シャットダウン・フックの実行は、JVMが終了しようとしている時点でSystem.exit()を呼び出すなどして、ユーザー・コード側で行います。

-Xshare:mode

クラス・データ共有(CDS)モードを設定します。

このオプションのmode引数には次を指定できます。

auto

可能な場合は、CDSを使用します。これはJava HotSpot 32-Bit Client VMのデフォルト値です。

on

CDSの使用が必須です。このオプションは、クラス・データ共有を使用できない場合、エラー・メッセージを出力して終了します。

off

CDSを使用しないように指示します。

-XshowSettings
すべての設定を表示してから、続行します。

-XshowSettings:category
設定を表示し、続行します。このオプションのcategory引数には次を指定できます。

all

設定のすべてのカテゴリを表示します。これはデフォルト値です。

locale

ロケールに関連する設定を表示します。

properties

システム・プロパティに関連する設定を表示します。

vm

JVMの設定を表示します。

-Xss size
スレッド・スタック・サイズ(バイト単位)を設定します。KBを指定するには文字kまたはK、MBを指定するには文字mまたはM、GBを指定するには文字gまたはGを付けます。デフォルト値はプラットフォームによって異なります。

- Linux/x64 (64ビット): 1024Kバイト

- OS X (64ビット): 1024Kバイト

- Oracle Solaris/x64 (64ビット): 1024Kバイト

- Windows: デフォルト値は、仮想メモリーによって異なります。

次の例では、様々な単位でスレッド・スタック・サイズを1024Kバイトに設定します。

-Xss1m
-Xss1024k
-Xss1048576

このオプションは-XX:ThreadStackSizeと似ています。

-Xverify:mode
バイトコード・ベリファイアのモードを設定します。バイトコード検証では、クラス・ファイルの形式が正しく、Java仮想マシンの仕様のクラス・ファイルの検証に関する項に記載されている制約を満足していることが確認されます。

検証を無効にすると、Javaが提供している保護が低下し、形式が正しくないクラス・ファイルのために問題が発生することもあるため、無効にしないでください。

このオプションのmode引数には次を指定できます。

remote

ブートストラップ・クラス・ローダーでロードされていないクラスを検証します。これは-Xverifyオプションを指定しない場合のデフォルトの動作です。

all

すべてのバイトコードの検証を有効にします。

none

すべてのバイトコードの検証を無効にします。-Xverify:noneの使用はサポートされていません。

--add-reads module=target-module(,target-module)*
モジュール宣言に関係なく、target-moduleを読み取るようにmoduleを更新します。target-moduleをALL-UNNAMEDにすると、名前のないモジュールをすべて読み取ることができます。

--add-exports module/package=target-module(,target-module)*
モジュール宣言に関係なく、packageをtarget-moduleにエクスポートするようにmoduleを更新します。target-moduleをALL-UNNAMEDにすると、名前のないモジュールをすべてエクスポートできます。

--add-opens module/package=target-module(,target-module)*
モジュール宣言に関係なく、packageをtarget-moduleに対してオープンするようにmoduleを更新します。

--illegal-access=parameter

注意:

このオプションはJDK 9の新しいオプションで、将来のJDKバージョンでは使用できなくなる場合があります。

実行時に指定する場合、--illegal-access=は操作モードを指定するキーワードparameterを取ります。

注意:

クラス・パス上のコードから内部APIへの不正アクセス操作は、JDK 9のデフォルトでは許可されます。

- permit: このモードは、JDK 8で存在するJDK 9のパッケージをクラス・パス上のコードに対してオープンします。これにより、setAccessibleの使用に依存してJDK内部APIに割り込んだり、このようなパッケージ内のクラスのメンバーに対して他の不正アクセスを実行するクラス・パス上のコードが旧リリースのように機能できます。このため、静的アクセス(コンパイル済のバイトコードなどによる)とディープ・リフレクション・アクセスの両方が使用可能になります。ディープ・リフレクション・アクセスは、プラットフォームのリフレクションAPIを介して行われます。このようなパッケージに対して初めてリフレクション・アクセス操作を行うと、警告が発行されます。しかし、次の操作から警告は発行されません。この1回の警告に、以降の警告を有効にする方法が記載されています。このモードは、JDK 9のデフォルトですが、将来のリリースでは変更される予定です。

- warn: このモードは、permitと同じですが、不正なリフレクション・アクセス操作ごとに警告メッセージが発行されます。

- debug: このモードは、warnと同じですが、不正なリフレクション・アクセス操作ごとに警告メッセージとスタック・トレースの両方が発行されます。

- deny: このモードは、不正アクセス操作をすべて無効にしますが、--add-opensなどの他のコマンド行オプションによって有効にされている操作は除きます。このモードは、将来のリリースでデフォルトとなる予定です。

デフォルト・モード--illegal-access=permitは、JDK内部APIに少なくとも1回はリフレクション・アクセスを実行するクラス・パス上のコードをユーザーに認識させることを目的としています。このようなアクセスをすべて認識するには、warnモードまたはdebugモードを使用できます。不正アクセスを必要とするクラス・パス上のライブラリまたはフレームワークそれぞれに対して、2つの選択肢があります。

- コンポーネントのメンテナンス管理者がJDK内部APIを使用しなくなった修正済バージョンをすでにリリースしている場合は、そのバージョンへのアップグレードを検討できます。

- 引き続きコンポーネントの修正が必要な場合は、メンテナンス管理者に連絡して、JDK内部APIの使用部分をエクスポートされた正式のAPIで置換するように依頼できます。

不正アクセスを必要とするコンポーネントを引き続き使用する必要がある場合は、1つ以上の--add-opensオプションを使用してアクセスする必要がある内部パッケージのみをオープンすることで、警告メッセージが発行されないようにできます。

アプリケーションが将来のバージョンのJDKに対応できるかどうかを確認するには、必要な--add-opensオプションとともに--illegal-access=denyを指定して実行します。残りの不正アクセス・エラーは、コンパイル済のコードからJDK内部APIへの静的リファレンスによる可能性が最も高いです。--jdk-internalsオプションを指定してjdepsツールを実行すると、それらを特定できます。パフォーマンス上の理由から、JDK 9では、不正な静的アクセス操作に関しての警告を発行しません。

--limit-modules module[,module...]
参照可能なモジュールの領域の制限を指定します。

--patch-module module=file(;file)*
JARファイルまたはディレクトリ内のクラスおよびリソースでモジュールをオーバーライドまたは拡張します。

--disable-@files
引数ファイル内を含めコマンド行の任意の場所で使用して、@filenameがそれ以上展開されないようにすることができます。このオプションは、オプションの後にある@argfilesを展開できないようにします。

Mac OS X用の追加オプション

次の追加オプションは、Mac OS X専用です。

-XstartOnFirstThread

最初の(AppKit)スレッドでmain()メソッドを実行します。

-Xdock:name=application name

ドックに表示されるデフォルトのアプリケーション名をオーバーライドします。

-Xdock:icon=path to icon file

ドックに表示されるデフォルトのアイコンをオーバーライドします。

javaの拡張ランタイム・オプション

これらのjavaオプションはJava HotSpot VMのランタイム動作を制御します。

-XX:+CheckEndorsedAndExtDirs

これらのディレクトリのいずれかが存在し、空でない場合にjavaコマンドがJavaアプリケーションの実行を防止するオプションを有効にします。

- lib/endorsed

- lib/ext

- プラットフォーム固有のシステム全体の拡張ディレクトリ

推奨規格優先メカニズムおよび拡張メカニズムはサポートされなくなりました。

-XX:-CompactStrings

コンパクト文字列機能を無効にします。デフォルトでは、このオプションが有効になっています。このオプションが有効になっていると、シングルバイト文字のみが含まれるJava文字列は、ISO-8859-1またはLatin-1エンコーディングを使用して1文字当たり1バイトの文字列として内部的に表され、格納されます。これにより、シングルバイト文字列のみが含まれる文字列に必要な容量が50%削減されます。1つ以上のマルチバイト文字が含まれるJava文字列の場合、これらはUTF-16エンコーディングを使用して1文字当たり2バイトとして表され、格納されます。コンパクト文字列機能を無効にすると、すべてのJava文字列に対してUTF-16エンコーディングを内部表現として使用することが強制されます。

コンパクト文字列を無効にした方が有益な場合は、次のとおりです。

- アプリケーションで圧倒的にマルチバイト文字の文字列を割り当てることがわかっている場合

- Java SE 8からJava SE 9への移行でパフォーマンス低下が観測され、コンパクト文字列がその低下を招いていることを分析が示している予期しないイベント

いずれのシナリオでも、コンパクト文字列を無効にすることが理にかなっています。

-XX:CompilerDirectivesFile=file

プログラムの起動時にディレクティブをファイルからディレクティブのスタックに追加します。コンパイラ・ディレクティブおよびコマンド行に関する項を参照してください。

-XX:CompilerDirectivesPrint

プログラムの起動時または新しいディレクティブの追加時にディレクティブのスタックを出力します。

-XX:ConcGCThreads=n

パラレル・マーキング・スレッド数を設定します。nをパラレル・ガベージ・コレクション・スレッド(ParallelGCThreads)の数の約1/4に設定します。

-XX:+DisableAttachMechanism

ツールをJVMに接続するメカニズムを無効にします。デフォルトでは、このオプションは無効になっており、アタッチ・メカニズムは有効になっているため、jcmd、jstack、jmap、jinfoなどの診断ツールおよびトラブルシューティング・ツールを使用できます。

注意:

JDKに同梱されているjcmd、jinfo、jmap、jstackなどのツールは、あるJDKバージョンのツールを使用して別のJDKバージョンをトラブルシューティングした場合にはサポートされません。

-XX:ErrorFile=filename

回復不能なエラーが発生した場合に、エラー・データが書き込まれるパスとファイル名を指定します。デフォルトで、このファイルは現在の作業ディレクトリに作成され、hs_err_pid pid.logという名前が付けられます(pidはエラーを発生させたプロセスの識別子です)。

次の例では、デフォルトのログ・ファイルを設定する方法を示します(プロセスの識別子は%pで指定されることに注意してください)。

-XX:ErrorFile=./hs_err_pid%p.log

- Oracle Solaris、LinuxおよびOS X: 次の例は、エラー・ログを/var/log/java/java_error.logに設定する方法を示しています。

-XX:ErrorFile=/var/log/java/java_error.log

- Windows: 次の例は、エラー・ログ・ファイルをC:/log/java/java_error.logに設定する方法を示しています。

-XX:ErrorFile=C:/log/java/java_error.log

指定されたディレクトリにファイルを作成できない場合(領域不足、アクセス権の問題またはその他の問題のため)、ファイルはオペレーティング・システムの一時ディレクトリに作成されます。

- Oracle Solaris、LinuxおよびOS X: 一時ディレクトリは/tmpです。

- Windows: 一時ディレクトリは、TMP環境変数の値で指定されます。その環境変数が定義されていない場合は、TEMP環境変数の値が使用されます。

-XX:+FailOverToOldVerifier

新しい型チェッカーが失敗した場合に、古いベリファイアへの自動フェールオーバーを有効にします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスでは、無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードのクラスに対してそれを有効にできます。

-XX:+FlightRecorder

アプリケーションの実行中のJavaフライト・レコーダ(JFR)の使用を有効にします。これは、次のように-XX:+UnlockCommercialFeaturesオプションを同時に指定する必要がある商用機能です。

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

注意:
-XX:+FlightRecorderオプションは、JFRを使用するのに不要になりました。この変更は、JDK 8u40で行われました。

-XX:FlightRecorderOptions=parameter=value

JFRの動作を制御するパラメータを設定します。これは、-XX:+UnlockCommercialFeaturesオプションとともに動作する商用機能です:-XX:+FlightRecorderオプションは、JFRを使用するのに不要になりました。この変更は、JDK 8u40で行われました。

次のリストには、使用可能なすべてのJFRパラメータが含まれています。

globalbuffersize=size

データの保持に使用されるプライマリ・メモリーの合計量(バイト単位)を指定します。サイズをKBで指定するにはkまたはK、サイズをMBで指定するにはmまたはM、サイズをGBで指定するにはgまたはGを追加します。デフォルトでは、このサイズは462848バイトに設定されます。

loglevel={quiet|error|warning|info|debug|trace}

JFRによってログ・ファイルに書き込まれるデータの量を指定します。デフォルトでは、infoに設定されています。

maxchunksize=size

記録のデータ・チャンクの最大サイズ(バイト単位)を指定します。サイズをKBで指定するにはkまたはK、サイズをMBで指定するにはmまたはM、サイズをGBで指定するにはgまたはGを追加します。デフォルトでは、データ・チャンクの最大サイズは12Mバイトに設定されます。

memorysize=size

使用するバッファ・メモリー量を決定します。

repository=path

一時ディスク・ストレージのリポジトリ(ディレクトリ)を指定します。デフォルトでは、システムの一時ディレクトリが使用されます。

samplethreads={true|false}

スレッド・サンプリングを有効にするかどうかを指定します。スレッド・サンプリングは、このパラメータとともにサンプリング・イベントが有効にされている場合にのみ行われます。デフォルトで、このパラメータは有効です。

stackdepth=depth

JFRによるスタック・トレースのスタックの深さ。デフォルトでは、この深さは64回のメソッド呼出しに設定されます。最大は2048、最小は1です。

threadbuffersize=size

スレッドごとのローカル・バッファ・サイズ(バイト単位)を指定します。サイズをKBで指定するにはkまたはK、サイズをMBで指定するにはmまたはM、サイズをGBで指定するにはgまたはGを追加します。このパラメータの値を大きくすると、グローバル・ストレージへのフラッシュと競合せずに、より多くのデータを収集できます。スレッドリッチ環境でアプリケーション・フットプリントが増加する場合があります。デフォルトでは、ローカル・バッファ・サイズは5Kバイトに設定されます。

transform={true|false}

JVMTIを使用してイベント・クラスを再変換するかどうかを指定します。falseの場合、イベント・クラスのロード時にインストゥルメンテーションが追加されます。デフォルトはtrueです。

複数のパラメータの値を指定するには、それらをコロンで区切ります。

-XX:InitiatingHeapOccupancyPercent=45
マーキング・サイクルを開始するJavaヒープ占有率のしきい値を設定します。デフォルトの占有率はJavaヒープ全体の45%です。

-XX:LargePageSizeInBytes=size
Oracle Solaris: ヒープに使用されるラージ・ページの最大サイズ(バイト単位)を設定します。size引数は2の累乗(2、4、8、16...)にする必要があります。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでサイズは0に設定され、JVMがラージ・ページのサイズを自動的に選択することを意味します。「ラージ・ページ」を参照してください。

次の例では、ラージ・ページ・サイズを4MBに設定する方法を示します。

-XX:LargePageSizeInBytes=4m

-XX:MaxDirectMemorySize=size
java.nioパッケージのダイレクトバッファ割当ての最大合計サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでサイズは0に設定され、JVMがNIOダイレクトバッファ割当てのサイズを自動的に選択することを意味します。

次の例では、様々な単位でNIOのサイズを1024Kバイトに設定する方法を示しています。

-XX:MaxDirectMemorySize=1m
-XX:MaxDirectMemorySize=1024k
-XX:MaxDirectMemorySize=1048576

-XX:-MaxFDLimit
オープン・ファイル・ディスクリプタ数のソフト制限をハード制限に設定する試みを無効にします。デフォルトでは、このオプションはすべてのプラットフォームで有効になっていますが、Windowsでは無視されます。Mac OSでこのオプションを無効にする必要があるのは、実際のシステムの最大値を下回る最大値10240が課せられる場合のみです。

-XX:MaxGCPauseMillis=200
望ましい最大一時停止時間の目標値を設定します。デフォルト値は200ミリ秒です。指定された値はヒープ・サイズには適応されません。

-XX:NativeMemoryTracking=mode
JVMネイティブ・メモリーの使用状況の追跡のモードを指定します。このオプションのmode引数には次を指定できます。

off

JVMネイティブ・メモリーの使用状況を追跡しないように指示します。これは-XX:NativeMemoryTrackingオプションを指定しない場合のデフォルトの動作です。

summary

Javaヒープ、クラス、コード、スレッドなどのJVMサブシステムによるメモリー使用状況のみを追跡します。

detail

JVMサブシステムによるメモリー使用状況の追跡に加えて、各CallSite、各仮想メモリー領域およびそのコミット済領域によるメモリー使用状況を追跡します。

-XX:ObjectAlignmentInBytes=alignment
Javaオブジェクトのメモリー配置を設定します(バイト単位)。デフォルトでは、値が8バイトに設定されます。指定する値は、2の累乗で8から256の範囲内(両端を含む)にする必要があります。このオプションにより、大きいJavaヒープ・サイズで圧縮ポインタを使用できます。

バイト単位のヒープ・サイズ制限は次のように計算されます:

4GB * ObjectAlignmentInBytes

注意:

配置の値が増えると、オブジェクト間の未使用の領域も増えます。結果として、大きいヒープ・サイズで圧縮ポインタを使用するメリットがわからない可能性があります。

-XX:OnError=string
回復不能なエラーが発生した場合に実行するカスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列にスペースを含む場合は、二重引用符で囲む必要があります。

- Oracle Solaris、LinuxおよびOS X: 次の例は、-XX:OnErrorオプションを使用して、回復不能なエラーが発生した場合にgcoreコマンドを実行してコア・イメージを作成し、デバッガを起動してプロセスに接続する方法を示しています(%pは現在のプロセスを指定します)。

-XX:OnError="gcore %p;dbx - %p"

- Windows: 次の例は、-XX:OnErrorオプションを使用して、回復不能なエラーが発生した場合にuserdump.exeユーティリティを実行し、クラッシュ・ダンプを取得する方法を示しています(%pは現在のプロセスを指定します)。この例では、userdump.exeユーティリティのパスがPATH環境変数に指定されていることを前提としています。

-XX:OnError="userdump.exe %p"

-XX:OnOutOfMemoryError=string
OutOfMemoryError例外が最初にスローされた場合に実行するカスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列にスペースを含む場合は、二重引用符で囲む必要があります。コマンド文字列の例については、-XX:OnErrorオプションの説明を参照してください。

-XX:ParallelGCThreads=n
STWワーカー・スレッドの値を設定します。nの値は論理プロセッサ数に設定します。nの値は論理プロセッサ数と同じです(最大値は8)。論理プロセッサが9個以上ある場合は、nの値を論理プロセッサ数の約5/8に設定します。これはほとんどのケースで機能しますが、nの値が論理プロセッサ数の約5/16になるような大規模なSPARCは例外です。

-XX:+PerfDataSaveToFile
有効にすると、Javaアプリケーションの終了時にjstatバイナリ・データを保存します。このバイナリ・データは、hsperfdata_pidという名前のファイルに保存されます(pidは実行したJavaアプリケーションのプロセス識別子です)。次のようにjstatを使用して、このファイルに含まれるパフォーマンス・データを表示します。

jstat -class file:///path/hsperfdata_pid

jstat -gc file:///path/hsperfdata_pid
-XX:+PrintCommandLineFlags
コマンド行に表示されるエルゴノミクスに従って選択されたJVMフラグの出力を有効にします。これは、ヒープ領域サイズや選択されたガベージ・コレクタなどのJVMによって設定されたエルゴノミクス値を知るために役立つ可能性があります。デフォルトでは、このオプションは無効になっており、フラグは出力されません。

-XX:+PreserveFramePointer
RBPレジスタを汎用レジスタとして使用する(-XX:-PreserveFramePointer)か、RBPレジスタを使用して現在実行しているメソッドのフレーム・ポインタを保持する(-XX:+PreserveFramePointer).かのいずれかを選択します。フレーム・ポインタが使用できる場合、外部プロファイリング・ツール(Linux perfなど)でより正確なスタック・トレースを作成できます。

-XX:+PrintNMTStatistics
メモリー追跡が有効にされている場合(-XX:NativeMemoryTrackingを参照)、JVMで収集されたネイティブ・メモリー追跡データの出力を有効にします。デフォルトでは、このオプションは無効になっており、ネイティブ・メモリー追跡データは出力されません。

-XX:+RelaxAccessControlCheck
ベリファイアのアクセス制御チェックの量を減らします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスでは、無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードのクラスに対してそれを有効にできます。

-XX:+ResourceManagement
アプリケーションの実行中にリソース管理の使用を有効にします。

これは、次のように-XX:+UnlockCommercialFeaturesオプションを同時に指定する必要がある商用機能です。

java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement
-XX:ResourceManagementSampleInterval=value in milliseconds
ミリ秒単位でリソース管理測定のサンプリング間隔を制御するパラメータを設定します。

リソース管理が有効な場合のみ(つまり、-XX:+ResourceManagementオプションが指定されている場合)、このオプションを使用できます。

-XX:SharedArchiveFile=path
クラス・データ共有(CDS)アーカイブ・ファイルのパスと名前を指定します

「アプリケーション・クラス・データ共有」を参照してください。

-XX:SharedArchiveConfigFile=shared_config_file
アーカイブ・ファイルに追加されるその他の共有データを指定します。

-XX:SharedClassListFile=file_name
クラス・データ共有(CDS)アーカイブに格納するクラス・ファイルの名前を含むテキスト・ファイルを指定します。このファイルは、クラス・ファイルのフル・ネームを1行に1つ含みます。ただしスラッシュ(/)はドット(.)に置換されます。たとえば、クラスjava.lang.Objectとhello.Mainを指定するには、次の2行を含むテキスト・ファイルを作成します。

java/lang/Object
hello/Main

このテキスト・ファイルで指定するクラス・ファイルには、アプリケーションでよく使用されるクラスを含める必要があります。アプリケーション、機能拡張またはブートストラップ・クラス・パスからのあらゆるクラスが含まれる場合があります。

「アプリケーション・クラス・データ共有」を参照してください。

-XX:+ShowMessageBoxOnError
JVMで回復不能なエラーが発生した場合に、ダイアログ・ボックスの表示を有効にします。これにより、JVMの終了を回避し、プロセスをアクティブに維持するため、これにデバッガを接続して、エラーの原因を調査できます。デフォルトでは、このオプションは無効になっています。

-XX:StartFlightRecording=parameter=value
JavaアプリケーションのJFR記録を開始します。これは、-XX:+UnlockCommercialFeaturesオプションとともに動作する商用機能です:このオプションは、実行時に記録を開始するJFR.start診断コマンドと同等です。JFR記録を開始するときに、次のパラメータを設定できます。

delay=time

Javaアプリケーションの起動時間から記録を開始するまでの遅延時間を指定します。時間を秒で指定するためにはs、分の場合はm、時間の場合はhまたは日の場合はdを追加します(たとえば、10mの指定は、10分を意味します)。デフォルトでは、遅延はなく、このパラメータは0に設定されます。

duration=time

記録の継続時間を指定します。時間を秒で指定するためにはs、分の場合はm、時間の場合はhまたは日の場合はdを追加します(たとえば、5hの指定は、5時間を意味します)。デフォルトでは、期間は制限されず、このパラメータは0に設定されています。

filename=path

JFR記録ログ・ファイルのパスと名前を指定します。

name=identifier

記録の名前と識別子の両方を取ります。

maxage=time

デフォルトの記録用にディスク・データを維持する最大期間を指定します。時間を秒で指定するためにはs、分の場合はm、時間の場合はhまたは日の場合dを追加します(たとえば、30sの指定は、30秒を意味します)。デフォルトでは、最大期間は15分(15m)に設定されます。

maxsize=size

デフォルト記録用に維持するディスク・データの最大サイズ(バイト単位)を指定します。サイズをKBで指定するにはkまたはK、サイズをMBで指定するにはmまたはM、サイズをGBで指定するにはgまたはGを追加します。デフォルトでは、ディスク・データの最大サイズは制限されず、このパラメータは0に設定されています。

settings=path

イベント設定ファイル(種類はJFC)のパスと名前を指定します。デフォルトでは、JAVA_HOME/jre/lib/jfrにあるdefault.jfcファイルが使用されます。

複数のパラメータの値を指定するには、それらをコロンで区切ります。

-XX:ThreadStackSize=size

Javaスレッド・スタック・サイズ(KB単位)を設定します。kなどのスケール接尾辞を使用すると、-XX:ThreadStackSize=1kがJavaスレッド・スタック・サイズを1024*1024バイトまたは1MBに設定するように、KB値のスケールとなります。デフォルト値はプラットフォームによって異なります。

- Linux/x64 (64ビット): 1024Kバイト

- OS X (64ビット): 1024Kバイト

- Oracle Solaris/x64 (64ビット): 1024Kバイト

- Windows: デフォルト値は、仮想メモリーによって異なります。

次の例では、様々な単位でスレッド・スタック・サイズを1MBに設定する方法を示しています。

-XX:ThreadStackSize=1k
-XX:ThreadStackSize=1024

このオプションは-Xssと似ています。

-XX:+UnlockCommercialFeatures
商用機能の使用を有効にします。商用機能は、Oracle Java SE製品とOracle Java Embedded製品のページで定義されているOracle Java SE AdvancedパッケージまたはOracle Java SE Suiteパッケージに含まれています。

デフォルトでは、このオプションは無効になっており、JVMは商用機能なしで実行します。JVMプロセスでそれらを有効にすると、そのプロセスでのそれらの使用を無効にすることはできません。

-XX:+UseAppCDS
アプリケーション・クラス・データ共有(AppCDS)を有効化します。AppCDSを使用するには、CDSダンプ時刻(オプション-Xshare:dumpを参照)とアプリケーション実行時刻の間に、オプション-XX:SharedClassListFileおよび-XX:SharedArchiveFileの値を指定する必要もあります。

これは、-XX:+UnlockCommercialFeaturesオプションを同時に指定する必要がある商用機能です。これは実験的な機能でもあり、今後のリリースで変更される場合があります。

「アプリケーション・クラス・データ共有」を参照してください。

-XX:-UseBiasedLocking
バイアス・ロックの使用を無効にします。大量の非競合同期を行うアプリケーションでは、このフラグを有効にすることで大幅な高速化が実現されることがありますが、特定のパターンのロックを行うアプリケーションでは速度が低下することがあります。

デフォルトでは、このオプションが有効になっています。

-XX:-UseCompressedOops
圧縮されたポインタの使用を無効にします。デフォルトではこのオプションが有効であり、Javaヒープ・サイズが32GBより小さい場合に圧縮ポインタが使用されます。このオプションが有効にされている場合、オブジェクト参照は64ビット・ポインタのかわりに32ビットのオフセットで表され、アプリケーションを32GB未満のJavaヒープ・サイズで実行している場合に、一般にパフォーマンスが向上します。このオプションは64ビットJVMの場合にのみ機能します。

Javaヒープ・サイズが32GBより大きい場合にも圧縮ポインタを使用できます。-XX:ObjectAlignmentInBytesオプションを参照してください。

XX:+UseGCLogRotation
大きなログ・ファイルを処理します。このオプションは、-Xloggc:filenameと一緒に使用する必要があります。

-XX:NumberOfGClogFiles=number of files
大きなログ・ファイルを処理します。number of filesは、1以上にする必要があります。デフォルトは1です。

-XX:GCLogFileSize=number
大きなログ・ファイルを処理します。numberの形式は、numberMまたはnumberKのいずれかです。デフォルトは512Kに設定されています。

-XX:+UseHugeTLBFS
Linuxのみ: このオプションは、-XX:+UseLargePagesを指定するのと同じです。このオプションはデフォルトでは無効です。このオプションは、メモリーの予約時にすべてのラージ・ページを事前に割り当てます。そのため、JVMはラージ・ページ・メモリー領域を動的に拡張または縮小できません。この動作を行う場合は、-XX:UseTransparentHugePagesを参照してください。

「ラージ・ページ」を参照してください。

-XX:+UseLargePages
ラージ・ページ・メモリーの使用を有効にします。デフォルトでは、このオプションは無効になっており、ラージ・ページ・メモリーは使用されません。

「ラージ・ページ」を参照してください。

-XX:+UseMembar
スレッド状態の遷移時にメンバーの発行を有効にします。このオプションは、有効になっているARMサーバーを除くすべてのプラットフォーム上で、デフォルトでは無効になっています。(ARMサーバーでこのオプションを無効にしないことをお薦めします。)

-XX:+UsePerfData
perfdata機能を有効にします。このオプションはデフォルトで有効にされており、JVMのモニタリングとパフォーマンスのテストが許可されます。これを無効にすると、hsperfdata_useridディレクトリの作成が抑制されます。perfdata機能を無効にするには、-XX:-UsePerfDataを指定します。

-XX:+UseTransparentHugePages
Linuxのみ: 動的に拡張または縮小できるラージ・ページの使用を有効にします。このオプションはデフォルトでは無効です。OSが他のページを移動してヒュージ・ページを作成するため、透過的ヒュージ・ページでパフォーマンスの問題が検出される場合があります。このオプションは試験的に使用できます。

-XX:+AllowUserSignalHandlers
アプリケーションがシグナル・ハンドラをインストールできるようにします。デフォルトでは、このオプションは無効になっており、アプリケーションはシグナル・ハンドラをインストールできません。

-XX:VMOptionsFile=filename
ユーザーがVMオプションをファイルに指定できるようにします。例: java -XX:VMOptionsFile=/var/my_vm_options HelloWorld。

javaの拡張JITコンパイラ・オプション

これらのjavaオプションはJava HotSpot VMによって実行されるJust-in-Time (JIT)動的コンパイルを制御します。

-XX:+AggressiveOpts

積極的なパフォーマンス最適化機能の使用を有効にします。デフォルトでは、このオプションは無効になっており、試験的パフォーマンス機能は使用されません。

-XX:AllocateInstancePrefetchLines=lines

インスタンス割当てポインタの前にプリフェッチする行数を設定します。デフォルトでプリフェッチする行数は1に設定されています。

-XX:AllocateInstancePrefetchLines=1

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchDistance=size

オブジェクト割当てのプリフェッチ距離のサイズ(バイト単位)を設定します。新しいオブジェクトの値で書き込まれようとしているメモリーが、最後に割り当てられたオブジェクトのアドレスからこの距離まで、プリフェッチされます。各Javaスレッドは独自の割当てポイントがあります。

マイナスの値は、プリフェッチ距離がプラットフォームに基づいて選択されたことを示します。プラスの値はプリフェッチするバイトです。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は-1に設定されます。

次の例は、プリフェッチ距離を1024バイトに設定する方法を示しています。

-XX:AllocatePrefetchDistance=1024

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchInstr=instruction

割当てポインタの前にプリフェッチするプリフェッチ命令を設定します。Java HotSpot Server VMのみが、このオプションをサポートしています。指定可能な値は0から3です。値の背後にある実際の命令はプラットフォームによって異なります。デフォルトで、プリフェッチ命令は0に設定されます。

-XX:AllocatePrefetchInstr=0

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchLines=lines

コンパイル済コードで生成されるプリフェッチ命令を使用して、最後のオブジェクトの割当て後にロードされるキャッシュ行数を設定します。デフォルト値は、最後に割り当てられたオブジェクトがインスタンスの場合は1で、配列の場合は3になります。

次の例は、ロードされるキャッシュ行数を5に設定する方法を示しています。

-XX:AllocatePrefetchLines=5

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchStepSize=size

連続したプリフェッチ命令のステップ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでは、ステップ・サイズは16バイトに設定されます。

-XX:AllocatePrefetchStepSize=16

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchStyle=style

プリフェッチ命令の生成されるコード・スタイルを設定します。style引数は、0から3までの整数です。

0

プリフェッチ命令を生成しません。

1

各割当て後にプリフェッチ命令を実行します。これはデフォルトのパラメータです。

2

スレッドローカル割当てブロック(TLAB)ウォーターマーク・ポインタを使用して、プリフェッチ命令を実行するタイミングを決定します。

3

SPARCで割当てプリフェッチにはBIS命令を使用します。

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+BackgroundCompilation
バックグラウンド・コンパイルを有効にします。このオプションはデフォルトで有効化されています。バックグラウンド・コンパイルを無効にするには、-XX:-BackgroundCompilationを指定します(これは-Xbatchを指定するのと同等です)。

-XX:CICompilerCount=threads
コンパイルに使用するコンパイラ・スレッド数を設定します。デフォルトで、スレッド数はサーバーJVMの場合に2に設定され、クライアントJVMの場合に1に設定され、階層型コンパイルが使用される場合はコア数まで拡大されます。次の例は、スレッド数を2に設定する方法を示しています。

-XX:CICompilerCount=2

-XX:CompileCommand=command,method[,option]
メソッドで実行するコマンドを指定します。たとえば、StringクラスのindexOf()メソッドをコンパイルから除外するには、次を使用します。

-XX:CompileCommand=exclude,java/lang/String.indexOf

スラッシュ(/)で区切られたすべてのパッケージとサブパッケージを含む完全クラス名を指定することに注意してください。切取りおよび貼付け操作を簡単にするため、-XX:+PrintCompilationおよび-XX:+LogCompilationオプションによって生成されるメソッド名形式を使用することもできます。

-XX:CompileCommand=exclude,java.lang.String::indexOf

メソッドを署名なしで指定した場合、コマンドは指定した名前を持つすべてのメソッドに適用されます。ただし、クラス・ファイル形式でメソッドの署名を指定することもできます。この場合、引数を引用符で囲んでください。そうしないと、シェルではセミコロンをコマンドの終了として扱います。たとえば、StringクラスのindexOf(String)メソッドのみをコンパイルから除外する場合は、次を使用します。

-XX:CompileCommand="exclude,java/lang/String.indexOf,(Ljava/lang/String;)I"

クラスおよびメソッド名にワイルドカードとしてアスタリスク(*)を使用することもできます。たとえば、すべてのクラスのすべてのindexOf()メソッドをコンパイルから除外するには、次を使用します。

-XX:CompileCommand=exclude,*.indexOf

カンマとピリオドはスペースの別名で、シェル経由でコンパイラ・コマンドを簡単に渡せるようになります。引数を引用符で囲んで、セパレータとしてスペースを使用して、-XX:CompileCommandに引数を渡すことができます。

-XX:CompileCommand="exclude java/lang/String indexOf"

-XX:CompileCommandオプションを使用して、コマンド行に渡されたコマンドが解析されると、JITコンパイラは.hotspot_compilerファイルからコマンドを読み取ります。このファイルにコマンドを追加するか、-XX:CompileCommandFileオプションを使用して別のファイルを指定できます。

複数のコマンドを追加するには、-XX:CompileCommandオプションを複数回指定するか、各引数を改行セパレータ(\n)で区切ります。次のコマンドを使用できます。

break

JVMをデバッグする際、指定されたメソッドのコンパイルの開始時に停止するブレークポイントを設定します。

compileonly

指定されたメソッドを除くすべてのメソッドをコンパイルから除外します。かわりに、-XX:CompileOnlyオプションを使用でき、これにより複数のメソッドを指定できます。

dontinline

指定されたメソッドのインライン化を防ぎます。

exclude

指定されたメソッドをコンパイルから除外します。

help

-XX:CompileCommandオプションのヘルプ・メッセージを出力します。

inline

指定されたメソッドのインライン化を試みます。

log

指定されたメソッドを除くすべてのメソッドのコンパイルのロギングを(-XX:+LogCompilationオプションを使用して)除外します。デフォルトで、ロギングはすべてのコンパイル済メソッドに対して実行されます。

option

最後の引数(option)のかわりに、指定されたメソッドにJITコンパイル・オプションを渡します。このコンパイル・オプションは、メソッド名の後の最後に設定します。たとえば、StringBufferクラスのappend()メソッドのBlockLayoutByFrequencyオプションを有効にするには、次を使用します。

-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency

カンマまたはスペースで区切った複数のコンパイル・オプションを指定できます。

print

指定されたメソッドのコンパイル後に生成されたアセンブラ・コードを出力します。

quiet

コンパイル・コマンドを出力しないように指示します。デフォルトで、-XX:CompileCommandオプションで指定したコマンドが出力されます。たとえば、StringクラスのindexOf()メソッドをコンパイルから除外した場合は、次が標準出力に出力されます。

CompilerOracle: exclude java/lang/String.indexOf

これを抑制するには、他の-XX:CompileCommandオプションの前に-XX:CompileCommand=quietオプションを指定します。

-XX:CompileCommandFile=filename
JITコンパイラ・コマンドが読み取られるファイルを設定します。デフォルトで、.hotspot_compilerファイルは、JITコンパイラによって実行されるコマンドを格納するために使用されます。

コマンド・ファイルの各行は、コマンド、クラス名、およびコマンドが使用されるメソッド名を表します。たとえば、この行は、StringクラスのtoString()メソッドのアセンブリ・コードを出力します。

print java/lang/String toString

JITコンパイラのコマンドを使用してメソッドで実行する場合は、-XX:CompileCommandオプションを参照してください。

-XX:CompileOnly=methods
コンパイルを制限すべきメソッドのリスト(カンマ区切り)を設定します。指定されたメソッドのみをコンパイルします。パッケージとサブパッケージを含む完全クラス名で各メソッドを指定します。たとえば、Stringクラスのlength()メソッドとListクラスのsize()メソッドのみをコンパイルするには、次を使用します。

-XX:CompileOnly=java/lang/String.length,java/util/List.size

スラッシュ(/)で区切られたすべてのパッケージとサブパッケージを含む完全クラス名を指定することに注意してください。切取りおよび貼付け操作を簡単にするため、-XX:+PrintCompilationおよび-XX:+LogCompilationオプションによって生成されるメソッド名形式を使用することもできます。

-XX:CompileOnly=java.lang.String::length,java.util.List::size

ワイルドカードはサポートされていませんが、クラスまたはパッケージ名のみを指定して、そのクラスまたはパッケージ内のすべてのメソッドをコンパイルすることも、メソッドのみを指定していずれかのクラス内のこの名前を持つメソッドをコンパイルすることもできます。

-XX:CompileOnly=java/lang/String
-XX:CompileOnly=java/lang
-XX:CompileOnly=.length

-XX:CompileThreshold=invocations
コンパイル前に解析対象メソッドの呼出しの数を設定します。デフォルトで、サーバーJVMでは、JITコンパイラは10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。クライアントJVMの場合、デフォルトの設定は1,500回の呼出しです。層コンパイルが有効な場合、このオプションは無視されます。オプション-XX:-TieredCompilationを参照してください。次の例は、解析対象メソッドの呼出し数を5,000に設定する方法を示しています。

-XX:CompileThreshold=5000

-Xcompオプションを指定して、コンパイル前にJavaメソッドの解析を完全に無効にできます。

-XX:CompileThresholdScaling=scale
最初のコンパイルの統合制御を指定します。このオプションは、操作の層モードと無層モードの両方のためにメソッドを初めてコンパイルする時期を制御します。CompileThresholdScalingオプションは0から正の無限大までの整数値を指定し、操作の現行モード(層および無層)に応じてしきい値のスケールを変更します。CompileThresholdScalingを1.0より小さい値に設定するとコンパイルが早まるのに対し、1.0より大きい値はコンパイルを遅らせます。CompileThresholdScalingを0に設定することは、コンパイルを無効にすることと同等です。

-XX:+DoEscapeAnalysis
エスケープ解析の使用を有効にします。このオプションはデフォルトで有効化されています。エスケープ解析の使用を無効にするには-XX:-DoEscapeAnalysisを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:InitialCodeCacheSize=size
初期コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は500Kバイトに設定されます。初期コード・キャッシュ・サイズをシステムの最小メモリー・ページ・サイズより小さくしないでください。次の例は、初期コード・キャッシュ・サイズを32Kバイトに設定する方法を示しています。

-XX:InitialCodeCacheSize=32k

-XX:+Inline
メソッドのインライン化を有効にします。このオプションは、パフォーマンス向上のため、デフォルトで有効になっています。メソッドのインライン化を無効にするには、-XX:-Inlineを指定します。

-XX:InlineSmallCode=size
インライン化すべきコンパイル済メソッドの最大コード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。指定されたサイズより小さいサイズのコンパイル済メソッドのみがインライン化されます。デフォルトでは、最大コード・サイズは1000バイトに設定されます。

-XX:InlineSmallCode=1000

-XX:+LogCompilation
現在の作業ディレクトリ内のhotspot.logというファイルへのコンパイル・アクティビティのロギングを有効にします。-XX:LogFileオプションを使用して、別のログ・ファイル・パスと名前を指定できます。

デフォルトでは、このオプションは無効になっており、コンパイル・アクティビティはログに記録されません。-XX:+LogCompilationオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:+PrintCompilationオプションを使用して、メソッドがコンパイルされるたびに、コンソールにメッセージが出力される詳細診断出力を有効にできます。

-XX:MaxInlineSize=size
インラインするメソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでは、最大バイトコード・サイズは35バイトに設定されます。

-XX:MaxInlineSize=35

-XX:MaxNodeLimit=nodes
単一のメソッドのコンパイル時に使用されるノードの最大数を設定します。デフォルトでは、ノードの最大数は65,000に設定されます。

-XX:MaxNodeLimit=65000

-XX:NonNMethodCodeHeapSize=size
非メソッド・コードが含まれるコード・セグメントのサイズ(バイト単位)を設定します。

非メソッド・コードが含まれる非メソッド・コード・セグメントには、コンパイラ・バッファやバイトコード・インタプリタなどがあります。このコード・タイプは、コード・キャッシュに永続的に留まります。このフラグを使用するのは、—XX:SegmentedCodeCacheが有効になっている場合のみです。

—XX:NonProfiledCodeHeapSize=size
非プロファイル・メソッドが含まれるコード・セグメントのサイズ(バイト単位)を設定します。このフラグを使用するのは、—XX:SegmentedCodeCacheが有効になっている場合のみです。

-XX:MaxTrivialSize=size
インライン化する簡易メソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでは、簡易メソッドの最大バイトコード・サイズは6バイトに設定されます。

-XX:MaxTrivialSize=6

-XX:+OptimizeStringConcat
String連結操作の最適化を有効にします。このオプションはデフォルトで有効化されています。String連結操作の最適化を有効にするには、-XX:-OptimizeStringConcatを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+PrintAssembly
外部のhsdis-<arch>.soまたは.dllライブラリを使用して、バイトコード化されたネイティブのメソッドのアセンブリ・コードの出力を有効にします。Windowsの64ビット版VMの場合は、hsdis-amd64.dllです。これにより、生成されたコードを確認できるため、パフォーマンス問題の診断に役立つことがあります。

デフォルトでは、このオプションは無効になっており、アセンブリ・コードは出力されません。-XX:+PrintAssemblyオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:ProfiledCodeHeapSize=size
プロファイル・メソッドが含まれるコード・セグメントのサイズ(バイト単位)を設定します。このフラグを使用するのは、—XX:SegmentedCodeCacheが有効になっている場合のみです。

-XX:+PrintCompilation
メソッドがコンパイルされるたびに、コンソールにメッセージを出力することによって、JVMからの詳細診断出力を有効にします。これにより、実際にコンパイルされるメソッドを確認できます。デフォルトでは、このオプションは無効になっており、診断出力は出力されません。

-XX:+LogCompilationオプションを使用して、コンパイル・アクティビティをファイルに記録することもできます。

-XX:+PrintInlining
インライン化の出力の決定を有効にします。これにより、インライン化されるメソッドを確認できます。

デフォルトでは、このオプションは無効になっており、インライン化情報は出力されません。-XX:+PrintInliningオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:ReservedCodeCacheSize=size
JITでコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトの最大コード・キャッシュ・サイズは240MBです。オプション-XX:-TieredCompilationを使用して階層化コンパイルを無効にした場合、デフォルトのサイズは48MBです。このオプションは2GBの制限があります。そうでない場合は、エラーが生成されます。最大コード・キャッシュ・サイズを初期コード・キャッシュ・サイズより小さくしないでください。-XX:InitialCodeCacheSizeオプションを参照してください。このオプションは-Xmaxjitcodesizeと同等です。

-XX:RTMAbortRatio=abort_ratio
RTM中止率を、すべての実行済RTMトランザクションに対するパーセンテージ(%)として指定します。中止されたトランザクション数がこの率を超えた場合、コンパイルされたコードが非最適化されます。この率は、-XX:+UseRTMDeoptオプションが有効な場合に使用されます。このオプションのデフォルト値は50です。つまり、すべてのトランザクションの50%が中止された場合、コンパイルされたコードが非最適化されます。

-XX:+SegmentedCodeCache
コード・キャッシュのセグメントを有効にします。—XX:+SegmentedCodeCacheを指定しないと、コード・キャッシュは1つの大きなセグメントで構成されます。—XX:+SegmentedCodeCacheを指定すると、非メソッド・コード、プロファイル・メソッド・コードおよび非プロファイル・メソッド・コード用のセグメントが別個に存在します。これらのセグメントは、実行時にサイズ変更されません。この機能は、層コンパイルが有効になっていて(-XX:+TieredCompilation)、-XX:ReservedCodeCacheSizeが240MB以上の場合、デフォルトでは有効になっています。メモリー・フットプリントが制御しやすくなり、コードの断片化が減り、改善された局所性によってiTLB/iCache動作が向上するといった利点があります。iTLB/iCacheは、インストラクション・トランスレーション・ルックアサイド・バッファ(ITLB)を意味するCPU固有の用語です。ICacheは、CPU内のインストラクション・キャッシュです。コード・キャッシュの実装は、ファイル/share/vm/code/codeCache.cppにあります。

-XX:StartAggressiveSweepingAt=percent
コード・キャッシュの指定パーセンテージしか空き状態でない場合に、アクティブ・メソッドのスタック・スキャンを強制実行して積極的に未使用コードを削除します。デフォルト値は10%です。

-XX:RTMRetryCount=number_of_retries
中止またはビジー状態の場合、通常のロック・メカニズムに戻るまでにRTMロック・コードが再試行される回数を指定します。このオプションのデフォルト値は5です。-XX:UseRTMLockingオプションを有効化する必要があります。

-XX:-TieredCompilation
階層化コンパイルの使用を無効にします。デフォルトでは、このオプションが有効になっています。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+UseAES
Intel、AMDおよびSPARCハードウェアに対して、ハードウェアベースのAES組込みを有効化します。Intel Westmere (2010以降)、AMD Bulldozer (2011以降)およびSPARC (T4以降)が、サポートされているハードウェアです。-XX:+UseAESは、UseAESIntrinsicsとともに使用します。組込みを制御するフラグには、オプション-XX:+UnlockDiagnosticVMOptionsが必要になりました。

-XX:+UseAESIntrinsics
-XX:+UseAESおよび-XX:+UseAESIntrinsicsフラグ(Java HotSpot Server VMに対してのみサポート)をデフォルトで有効にします。ハードウェアベースのAES組込みを無効化するには、-XX:-UseAES -XX:-UseAESIntrinsicsを指定します。たとえば、ハードウェアAESを有効化するには、次のフラグを使用します。

-XX:+UseAES -XX:+UseAESIntrinsics

組込みを制御するフラグには、オプション-XX:+UnlockDiagnosticVMOptionsが必要になりました。UseAESおよびUseAESIntrinsicsフラグをサポートするには、-serverオプションを使用してJava HotSpot Server VMを選択します。これらのフラグは、クライアントVMではサポートされていません。

-XX:+UseCMoveUnconditionally
収益性分析に関係なく、CMove (スカラーおよびベクター)命令を生成します。

-XX:+UseCodeCacheFlushing
コンパイラのシャットダウン前に、コード・キャッシュのフラッシュを有効にします。このオプションはデフォルトで有効化されています。コンパイラのシャットダウン前に、コード・キャッシュのフラッシュを無効にするには、-XX:-UseCodeCacheFlushingを指定します。

-XX:+UseCondCardMark
カード表を更新する前に、カードがすでにマークされているかどうかのチェックを有効にします。このオプションはデフォルトでは無効です。複数のソケットを持つマシンでのみ使用してください。これにより、同時操作に依存するJavaアプリケーションのパフォーマンスが向上します。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+UseCountedLoopSafepoints
計数されるループ内でセーフポイントを維持します。デフォルト値はfalseです。

-XX:+UseFMA
FMA命令が使用できるハードウェア(Intel、SPARC、ARM64など)に対してハードウェアベースのFMA組込みを有効にします。FMA組込みは、(a * b + c)式の値を計算するjava.lang.Math.fma(a, b, c)メソッドに対して生成されます。

-XX:+UseRTMDeopt
中止率に応じて、RTMロックを自動調整します。この率は、-XX:RTMAbortRatioオプションによって指定されます。中止されたトランザクション数が中止率を超えた場合、ロックを含むメソッドがすべてのロックで標準のロックとして非最適化および再コンパイルされます。このオプションはデフォルトでは無効です。-XX:+UseRTMLockingオプションを有効化する必要があります。

-XX:+UseRTMLocking
フォールバック・ハンドラとして標準のロック・メカニズムを使用して、展開されたすべてのロックに対してRestricted Transactional Memory (RTM)ロック・コードを生成します。このオプションはデフォルトでは無効です。RTMに関連するオプションは、Transactional Synchronization Extensions (TSX)をサポートするx86 CPU上のJava HotSpot Server VMに対してのみ使用可能です。

RTMは、x86命令セット拡張でマルチスレッド・アプリケーションの作成を容易にするIntelのTSXの一部です。RTMでは、新しい命令 XBEGIN、XABORT、XENDおよびXTESTが導入されています。XBEGINおよびXEND命令は、トランザクションとして実行するための命令セットを囲みます。トランザクションの実行時に競合が見つからなかった場合、メモリーとレジスタの変更が、XEND命令で同時にコミットされます。XABORT命令ではトランザクションを明示的に中止でき、XEND命令では命令セットがトランザクション内で実行中かどうかを確認できます。

トランザクションのロックは、別のスレッドが同じトランザクションにアクセスしようとしたときに展開されます。したがって、そのトランザクションへのアクセスを当初リクエストしなかったスレッドはブロックされます。RTMでは、トランザクションが中止または失敗した場合のために、フォールバックの操作セットを指定する必要があります。RTMロックとは、TSXのシステムに委譲されているロックです。

RTMにより、重要なリージョンにおいて衝突が少なく競合度の高いロックのパフォーマンスが向上されます(これは、複数のスレッドによって同時にアクセスできないコードです)。また、RTMにより、粗粒度ロックのパフォーマンスも向上されますが、一般的にマルチスレッド・アプリケーションでのパフォーマンスはよくありません。(粗粒度ロックとは、ロックの取得および解放のオーバーヘッドを最小化するために長い期間ロックを保持する戦略であり、一方、細粒度ロックとは必要な場合のみロックし可能なかぎり早期にロック解除することで最大限の並行処理の達成を試みる戦略です。)さらに、異なるスレッドによって使用されている軽度な競合ロックの場合、RTMにより、誤ったキャッシュ・ライン共有(キャッシュ・ライン・ピンポンとも呼ばれる)を削減できます。これは、異なるプロセッサからの複数のスレッドが異なるリソースにアクセスしている場合に発生しますが、リソースは同じキャッシュ・ラインを共有します。結果として、プロセッサは他のプロセッサのキャッシュ・ラインを繰り返し無効にし、これにより、キャッシュではなくメイン・メモリーからの読取りが強制されます。

-XX:+UseSHA
SPARCハードウェアのSHA暗号化ハッシュ関数のハードウェアベースの組込みを有効にします。UseSHAオプションは、UseSHA1Intrinsics、UseSHA256IntrinsicsおよびUseSHA512Intrinsicsオプションと組み合せて使用します。

UseSHAおよびUseSHA*Intrinsicsフラグはデフォルトで有効であり、SPARC T4以上のJava HotSpot Server VM 64ビットでのみサポートされます。

SHA操作に対してsun.security.provider.Sunプロバイダを使用する場合のみ、この機能を適用できます。組込みを制御するフラグには、オプション-XX:+UnlockDiagnosticVMOptionsが必要になりました。

すべてのハードウェアベースのSHA組込みを無効にするには、-XX:-UseSHAを指定します。特定のSHA組込みのみ無効化するには、適切な対応するオプションを使用してください。例: -XX:-UseSHA256Intrinsics。

-XX:+UseSHA1Intrinsics
SHA-1暗号化ハッシュ関数の組込みを有効にします。組込みを制御するフラグには、オプション-XX:+UnlockDiagnosticVMOptionsが必要になりました。

-XX:+UseSHA256Intrinsics
SHA-224およびSHA-256暗号化ハッシュ関数の組込みを有効にします。組込みを制御するフラグには、オプション-XX:+UnlockDiagnosticVMOptionsが必要になりました。

-XX:+UseSHA512Intrinsics
SHA-384およびSHA-512暗号化ハッシュ関数の組込みを有効にします。組込みを制御するフラグには、オプション-XX:+UnlockDiagnosticVMOptionsが必要になりました。

-XX:+UseSuperWord
スカラー操作のスーパーワード操作への変換を有効にします。スーパーワードとは、ベクトル化最適化です。このオプションはデフォルトで有効化されています。スカラー操作のスーパーワード操作への変換を無効にするには、-XX:-UseSuperWordを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。

javaの拡張保守性オプション

これらのjavaオプションは、システム情報を収集し、詳細デバッグを実行する機能を提供します。

-XX:+ExtendedDTraceProbes

Oracle Solaris、LinuxおよびOS X: パフォーマンスに影響するdtraceツールの追加のプローブを有効にします。デフォルトでは、このオプションは無効になっており、dtraceは標準プローブだけを実行します。

-XX:+HeapDumpOnOutOfMemoryError

java.lang.OutOfMemoryError例外がスローされた場合に、ヒープ・プロファイラ(HPROF)を使用して、Javaヒープの現在のディレクトリ内のファイルへのダンプを有効にします。ヒープ・ダンプ・ファイルのパスと名前を明示的に設定するには、-XX:HeapDumpPathオプションを使用します。デフォルトでは、このオプションは無効になっており、OutOfMemoryError例外がスローされたときにヒープがダンプされません。

-XX:HeapDumpPath=path

-XX:+HeapDumpOnOutOfMemoryErrorオプションが設定されている場合に、ヒープ・プロファイラ(HPROF)によって提供されるヒープ・ダンプを書き込むパスとファイル名を設定します。デフォルトでは、このファイルは現在の作業ディレクトリに作成され、java_pidpid.hprofという名前が付けられます(pidはエラーを発生させたプロセスの識別子です)。次の例では、デフォルトのファイルを明示的に設定する方法を示します(%pは現在のプロセス識別子を表します)。

-XX:HeapDumpPath=./java_pid%p.hprof

- Oracle Solaris、LinuxおよびOS X: 次の例は、ヒープ・ダンプ・ファイルを/var/log/java/java_heapdump.hprofに設定する方法を示しています。

-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof

- Windows: 次の例は、ヒープ・ダンプ・ファイルをC:/log/java/java_heapdump.logに設定する方法を示しています。

-XX:HeapDumpPath=C:/log/java/java_heapdump.log

-XX:LogFile=path

ログ・データが書き込まれるパスとファイル名を設定します。デフォルトでは、ファイルは現在の作業ディレクトリに作成され、hotspot.logという名前が付けられます。

- Oracle Solaris、LinuxおよびOS X: 次の例は、ログ・ファイルを/var/log/java/hotspot.logに設定する方法を示しています。

-XX:LogFile=/var/log/java/hotspot.log

- Windows: 次の例は、ログ・ファイルをC:/log/java/hotspot.logに設定する方法を示しています。

-XX:LogFile=C:/log/java/hotspot.log

-XX:+PrintClassHistogram

次のイベントのいずれかの後のクラス・インスタンス・ヒストグラムの出力を有効にします。

- Oracle Solaris、LinuxおよびOS X: [Ctrl]+[Break]

- Windows: [Ctrl]+[C] (SIGTERM)

デフォルトでは、このオプションは無効になっています。

このオプションを設定することは、jmap -histoコマンドまたはjcmd pid GC.class_histogramコマンドを実行することと同等で、pidは現在のJavaプロセス識別子です。

-XX:+PrintConcurrentLocks

次のイベントのいずれかの後のjava.util.concurrentロックの出力を有効にします。

- Oracle Solaris、LinuxおよびOS X: [Ctrl]+[Break]

- Windows: [Ctrl]+[C] (SIGTERM)

デフォルトでは、このオプションは無効になっています。

このオプションを設定することは、jstack -lコマンドまたはjcmd pid Thread.print -lコマンドを実行することと同等で、pidは現在のJavaプロセス識別子です。

-XX:+PrintFlagsRanges

指定された範囲を出力し、値の自動テストを可能にします。「Java仮想マシンのフラグ引数の検証」を参照してください。

-XX:+UnlockDiagnosticVMOptions

JVMの診断目的のオプションをロック解除します。デフォルトでは、このオプションは無効になっており、診断オプションを使用できません。

javaの拡張ガベージ・コレクション・オプション

これらのjavaオプションはJava HotSpot VMによってガベージ・コレクション(GC)がどのように実行されるかを制御します。

-XX:+AggressiveHeap

Javaヒープ最適化を有効にします。これにより、コンピュータの構成(RAMおよびCPU)に基づいて、メモリーが集中的に割り当てられる長時間実行ジョブに最適になるように、各種パラメータを設定します。デフォルトでは、このオプションは無効になっており、ヒープは最適化されません。

-XX:+AlwaysPreTouch

JVM初期化時にJavaヒープ上のすべてのページのアクセスを有効にします。これにより、main()メソッドに入る前に、すべてのページがメモリーに入れられます。このオプションは、すべての仮想メモリーを物理メモリーにマッピングして、長時間実行システムをシミュレートするテストで使用できます。デフォルトでは、このオプションは無効になっており、JVMヒープ領域がいっぱいになると、すべてのページがコミットされます。

-XX:+CMSClassUnloadingEnabled

コンカレント・マーク・スイープ(CMS)ガベージ・コレクタを使用した場合に、クラスのアンロードを有効にします。このオプションはデフォルトで有効化されています。CMSガベージ・コレクタのクラスのアンロードを無効にするには、-XX:-CMSClassUnloadingEnabledを指定します。

-XX:CMSExpAvgFactor=percent

並行処理コレクションの統計のための指数平均の計算時に、現在のサンプルの重み付けに使用される時間のパーセンテージ(0から100)を設定します。デフォルトで、指数平均係数は25%に設定されます。次の例は、係数を15%に設定する方法を示しています。

-XX:CMSExpAvgFactor=15

-XX:CMSIncrementalDutyCycle=percent

CMSコレクタが実行を許可されるマイナー・コレクション間の時間のパーセンテージ(0から100)を設定します。CMSIncrementalPacingが有効な場合、これは単なる初期値です。デフォルト値は10です。

-XX:CMSIncrementalDutyCycleMin=percent

CMSIncrementalPacingが有効になっている場合に、デューティ・サイクルの下限であるパーセンテージ(0から100)を設定します。デフォルト値は0 (ゼロ)です。

-XX:CMSIncrementalDutySafetyFactor=percent

デューティ・サイクルの計算時に、保守性を追加するために使用されるパーセンテージ(0から100)を設定します。デフォルト値は10です。

-XX:CMSIncrementalOffset=percent

インクリメンタル・モード・デューティ・サイクルがマイナー・コレクション間の期間内に右側に移動されるパーセンテージ(0から100)を設定します。デフォルト値は0 (ゼロ)です。

-XX:+CMSIncrementalPacing

自動調整を有効にします。JVMの実行中に収集された統計に基づいて、インクリメンタル・モードのデューティ・サイクルが自動的に調整されます。デフォルトでは、このオプションは無効になっています。

-XX:+CMSScavengeBeforeRemark

CMS remarkステップの前に清掃の試みを有効にします。デフォルトでは、このオプションは無効になっています。

-XX:CMSTriggerRatio=percent

CMSコレクション・サイクルの開始前に割り当てられるオプション-XX:MinHeapFreeRatioによって指定された値のパーセンテージ(0から100)を設定します。デフォルト値は80%に設定されます。

次の例は、占有の割合を75%に設定する方法を示しています。

-XX:CMSTriggerRatio=75

-XX:ConcGCThreads=threads

並行GCに使用されるスレッド数を設定します。threadsをパラレル・ガベージ・コレクション・スレッドの数の約1/4に設定します。デフォルト値は、JVMに使用可能なCPUの数によって異なります。

たとえば並行GCのスレッド数を2に設定するには、次のオプションを指定します。

-XX:ConcGCThreads=2

-XX:+DisableExplicitGC

System.gc()メソッドへの呼出しの処理を無効にするオプションを有効にします。このオプションはデフォルトで無効にされ、System.gc()の呼出しが処理されることを意味します。System.gc()への呼出しの処理が無効にされている場合、JVMは引き続き必要に応じてGCを実行します。

-XX:+ExplicitGCInvokesConcurrent

System.gc()要求を使用して、並行GCの呼出しを有効にします。このオプションはデフォルトで無効にされており、-XX:+UseConcMarkSweepGCオプションおよび-XX:+UseG1GCオプションと一緒の場合のみ有効にできます。

-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

System.gc()要求を使用して、並行GCの呼出しと並行GCサイクル時のクラスのアンロードを有効にします。このオプションはデフォルトで無効にされており、-XX:+UseConcMarkSweepGCオプションと一緒の場合のみ有効にできます。

-XX:G1HeapRegionSize=size

ガベージファースト(G1)コレクタを使用した場合に、Javaヒープが再分割される領域のサイズを設定します。この値は2の累乗で、1MBから32MBの範囲で指定できます。最小Javaヒープ・サイズを基に、リージョンが約2048個になるようにします。デフォルトの領域サイズは、ヒープ・サイズに基づいて、エルゴノミクスに従って決定されます。

次の例では、再分割のサイズを16MBに設定します。

-XX:G1HeapRegionSize=16m

-XX:G1HeapWastePercent=percent

未使用にするヒープの許容パーセンテージを設定します。再生可能率がヒープの未使用率を下回ると、Java HotSpot VMは混合ガベージ・コレクション・サイクルを開始しません。デフォルトは5パーセントです。

-XX:G1MaxNewSizePercent=percent

young世代の最大サイズとして使用するヒープ・サイズのパーセンテージを設定します。デフォルト値は現在のJavaヒープの60%です。

これは試験的なフラグです。この設定は-XX:DefaultMaxNewGenPercent設定にかわるものです。

この設定はJava HotSpot VMビルド23以前では使用できません。

-XX:G1MixedGCCountTarget=number

マーキング・サイクル後に古いリージョンのライブ・データ(最大でG1MixedGCLIveThresholdPercent%)を収集する混合ガベージ・コレクションの目標回数を設定します。デフォルトは、8回の混合ガベージ・コレクションです。混合コレクションの実行を、この目標回数以内に抑えます。

この設定はJava HotSpot VMビルド23以前では使用できません。

-XX:G1MixedGCLiveThresholdPercent=percent

混合ガベージ・コレクション・サイクルに含める古い世代の占有率のしきい値を設定します。デフォルトの占有率は85%です。

これは試験的なフラグです。この設定は-XX:G1OldCSetRegionLiveThresholdPercent設定にかわるものです。

この設定はJava HotSpot VMビルド23以前では使用できません。

-XX:G1NewSizePercent=percent

若い世代の最小サイズとして使用するヒープの割合を設定します。デフォルト値は現在のJavaヒープの5%です。

これは試験的なフラグです。この設定は-XX:DefaultMinNewGenPercent設定にかわるものです。

この設定はJava HotSpot VMビルド23以前では使用できません。

-XX:G1OldCSetRegionThresholdPercent=percent

混合ガベージ・コレクション・サイクル時に収集する古い世代の数に上限を設定します。デフォルトはJavaヒープの10%です。

この設定はJava HotSpot VMビルド23以前では使用できません。

-XX:G1ReservePercent=percent

G1コレクタの昇格の失敗の可能性を減らすために、失敗の上限として予約されるヒープのパーセンテージ(0から50)を設定します。このパーセンテージを増減するときは、必ずJavaヒープの合計量を同量分調整してください。デフォルトで、このオプションは10%に設定されます。

次の例では、予約されたヒープを20%に設定します。

-XX:G1ReservePercent=20

-XX:InitialHeapOccupancyPercent=percent

マーキング・サイクルを開始するJavaヒープ占有率のしきい値を設定します。デフォルトの占有率はJavaヒープ全体の45%です。

-XX:InitialHeapSize=size

メモリー割当てプールの初期サイズ(バイト単位)を設定します。この値は0または1Mバイトより大きい1024の倍数にする必要があります。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は、実行時にシステム構成に基づいて選択されます。

次の例では、様々な単位を使用して、割り当てられたメモリーのサイズを6Mバイトに設定する方法を示します。

-XX:InitialHeapSize=6291456
-XX:InitialHeapSize=6144k
-XX:InitialHeapSize=6m

このオプションを0に設定した場合、初期サイズは、Old世代とYoung世代に割り当てられたサイズの合計として設定されます。Young世代のヒープのサイズは、-XX:NewSizeオプションを使用して、設定できます。

-XX:InitialSurvivorRatio=ratio

スループット・ガベージ・コレクタ(これは-XX:+UseParallelGCおよび-XX:+UseParallelOldGCオプションによって有効にする)によって使用される初期Survivor領域率を設定します。適応型のサイズ変更は、-XX:+UseParallelGCおよび-XX:+UseParallelOldGCオプションを使用して、スループット・ガベージ・コレクタによってデフォルトで有効にされ、Survivor領域は、初期値から、アプリケーションの動作に従ってサイズ変更されます。適応型のサイズ変更が無効にされている場合(-XX:-UseAdaptiveSizePolicyオプションを使用して)、-XX:SurvivorRatioオプションを使用して、アプリケーションの全体の実行のSurvivor領域のサイズを設定してください。

次の公式を使用して、Young世代のサイズ(Y)に基づいて、Survivor領域の初期サイズ(S)と初期Survivor領域率(R)を計算できます。

S=Y/(R+2)

方程式の2は2つのSurvivor領域を示します。初期Survivor領域率として指定する値が大きいほど、初期Survivor領域のサイズが小さくなります。

デフォルトで初期Survivor領域率は8に設定されます。Young世代の領域サイズにデフォルト値を使用する場合(2 MB)、Survivor領域の初期サイズは0.2 MBになります。

次の例は、初期Survivor領域率を4に設定する方法を示しています。

-XX:InitialSurvivorRatio=4

-XX:InitiatingHeapOccupancyPercent=percent

並行GCサイクルを開始するヒープ占有率(0から100)を設定します。これはいずれかの世代(G1ガベージ・コレクタなど)だけでなく、ヒープ全体の占有率に基づいて並行GCサイクルをトリガーするガベージ・コレクタによって使用されます。

デフォルトでは、開始値は45%に設定されます。0の値は無停止のGCサイクルを示します。次の例は、開始ヒープ占有率を75%に設定する方法を示しています。

-XX:InitiatingHeapOccupancyPercent=75

-XX:MaxGCPauseMillis=time

GCの最大一時停止時間(ミリ秒単位)の目標を設定します。これはソフト・ゴールのため、JVMはその実現のために最善の努力をします。指定された値はヒープ・サイズには適応されません。デフォルトでは、最大一時停止時間値はありません。

次の例は、最大目標一時停止時間を500msに設定する方法を示しています。

-XX:MaxGCPauseMillis=500

-XX:MaxHeapSize=size

メモリー割当てプールの最大サイズ(バイト単位)を設定します。この値は、1024の倍数で、2Mバイトより大きくなければなりません。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントの場合、オプション-XX:InitialHeapSizeと-XX:MaxHeapSizeが同一の値に設定されていることがよくあります。

次の例では、様々な単位を使用して、割り当てられたメモリーの最大許容サイズを80Mバイトに設定する方法を示します。

-XX:MaxHeapSize=83886080
-XX:MaxHeapSize=81920k
-XX:MaxHeapSize=80m

Oracle Solaris 7およびOracle Solaris 8 SPARCプラットフォームの場合の上限は、およそ4,000Mバイトからオーバーヘッドの量を引いたものです。Oracle Solaris 2.6およびx86プラットフォームの場合の上限は、およそ2,000Mバイトからオーバーヘッドの量を引いたものです。Linuxプラットフォームの場合の上限は、およそ2,000Mバイトからオーバーヘッドの量を引いたものです。

-XX:MaxHeapSizeオプションは-Xmxと同等です。

-XX:MaxHeapFreeRatio=percent

GCイベント後の空きヒープ領域の最大許容率(0から100)を設定します。空きヒープ領域がこの値を超えて拡大した場合、ヒープが縮小されます。デフォルトで、この値は70%に設定されます。

Javaヒープ・サイズを最小化するには、コマンド行オプション-XX:MaxHeapFreeRatioおよび-XX:MinHeapFreeRatioを使用して、パラメータ-XX:MaxHeapFreeRatio (デフォルト値は70%)および-XX:MinHeapFreeRatio (デフォルト値は40%)の値を小さくします。MaxHeapFreeRatioを10%程度小さくしてMinHeapFreeRatioを5%小さくすると、パフォーマンスが大幅に低下することなく、ヒープ・サイズが正常に削減されます。ただし、アプリケーションによって結果は大きく異なることがあります。これらのパラメータの値を可能なかぎり小さくし、許容できるパフォーマンスを維持するように、様々な値を試してください。

-XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5

ヒープを小さく維持しようとするには、オプション-XX:-ShrinkHeapInStepsも追加する必要があります。このオプションを使用して、埋込みアプリケーションの動的フットプリントを減らすことでJavaヒープを小さく維持する方法の詳細は、「パフォーマンス・チューニングの例」を参照してください。

-XX:MaxMetaspaceSize=size

クラス・メタデータに割当て可能なネイティブ・メモリーの最大量を設定します。デフォルトでは、サイズは無制限です。アプリケーションのメタデータの量は、アプリケーション自体、その他の実行中のアプリケーション、およびシステムで使用可能なメモリーの量によって異なります。

次の例は、最大クラス・メタデータ・サイズを256Mバイトに設定する方法を示しています。

-XX:MaxMetaspaceSize=256m

-XX:MaxNewSize=size

Young世代(ナーサリ)のヒープの最大サイズ(バイト単位)を設定します。デフォルト値はエルゴノミクスに従って設定されます。

-XX:MaxTenuringThreshold=threshold

適応型GCサイズ変更に使用する最大殿堂入りしきい値を設定します。最大値は15です。デフォルト値はパラレル(スループット)コレクタの場合15で、CMSコレクタの場合6です。

次の例は、最大殿堂入りしきい値を10に設定する方法を示しています。

-XX:MaxTenuringThreshold=10

-XX:MetaspaceSize=size

初めて超えたときにガベージ・コレクションがトリガーされる、割り当てられるクラス・メタデータ領域のサイズを設定します。ガベージ・コレクションのこのしきい値は、使用されるメタデータの量に応じて増加または減少します。デフォルトのサイズはプラットフォームによって異なります。

-XX:MinHeapFreeRatio=percent

GCイベント後の空きヒープ領域の最小許容率(0から100)を設定します。空きヒープ領域がこの値を下回った場合、ヒープが拡張されます。デフォルトで、この値は40%に設定されます。

Javaヒープ・サイズを最小化するには、コマンド行オプション-XX:MaxHeapFreeRatioおよび-XX:MinHeapFreeRatioを使用して、パラメータ-XX:MaxHeapFreeRatio (デフォルト値は70%)および-XX:MinHeapFreeRatio (デフォルト値は40%)の値を小さくします。MaxHeapFreeRatioを10%程度小さくしてMinHeapFreeRatioを5%小さくすると、パフォーマンスが大幅に低下することなく、ヒープ・サイズが正常に削減されます。ただし、アプリケーションによって結果は大きく異なることがあります。これらの値が可能なかぎり低くなり、許容できるパフォーマンスを維持するように、様々な値を試してください。

-XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5

ヒープを小さく維持しようとするには、オプション-XX:-ShrinkHeapInStepsも追加する必要があります。このオプションを使用して、埋込みアプリケーションの動的フットプリントを減らすことでJavaヒープを小さく維持する方法の詳細は、「パフォーマンス・チューニングの例」を参照してください。

-XX:NewRatio=ratio

Young世代のサイズとOld世代のサイズの比率を設定します。デフォルトでは、このオプションは2に設定されます。次の例は、Young/Oldの比率を1に設定する方法を示しています。

-XX:NewRatio=1

-XX:NewSize=size

Young世代(ナーサリ)のヒープの初期サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。

ヒープのYoung世代領域は新しいオブジェクトに使用されます。この領域では他の領域よりも頻繁にGCが実行されます。Young世代のサイズが小さすぎる場合は、大量のマイナーGCが実行されます。そのサイズが大きすぎる場合は、フルGCのみが実行されますが、これは完了までに長時間かかることがあります。Young世代のサイズをヒープ・サイズ全体の25%から50%の間に維持することをお薦めします。

次の例は、様々な単位を使用して、Young世代の初期サイズを256MBに設定する方法を示しています。

-XX:NewSize=256m
-XX:NewSize=262144k
-XX:NewSize=268435456

-XX:NewSizeオプションは-Xmnと同等です。

-XX:ParallelGCThreads=threads

stop-the-world (STW)ワーカー・スレッドの値を設定します。このオプションは、threadsの値を論理プロセッサの数に設定します。threadsの値は論理プロセッサ数と同じです(最大値は8)。

論理プロセッサが9個以上ある場合は、threadsの値を論理プロセッサ数の約5/8に設定します。これはほとんどのケースで機能しますが、threadsの値が論理プロセッサ数の約5/16になるような大規模なSPARCシステムは例外です。

デフォルト値は、JVMに使用可能なCPUの数によって異なります。

たとえばパラレルGCのスレッド数を2に設定するには、次のオプションを指定します。

-XX:ParallelGCThreads=2

-XX:+ParallelRefProcEnabled

パラレル参照処理を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintAdaptiveSizePolicy

適応型世代サイズ変更に関する情報の出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+ScavengeBeforeFullGC

各フルGCの前にYoung世代のGCを有効にします。このオプションはデフォルトで有効化されています。フルGCの前にYoung世代を清掃することによって、Old世代の領域からYoung世代の領域に到達可能なオブジェクト数を削減できるため、これを無効にしないことをお薦めします。各フルGCの前にYoung世代のGCを無効にするには、オプション-XX:-ScavengeBeforeFullGCを指定します。

-XX:-ShrinkHeapInSteps

オプション—XX:MaxHeapFreeRatioで指定した目標サイズまでJavaヒープを徐々に減らします。このオプションはデフォルトで有効化されています。無効にすると、複数のガーベジ・コレクション・サイクルを要求するかわりにJavaヒープを目標サイズまで即時減らします。Javaヒープ・サイズを最小化する場合は、このオプションを無効にします。このオプションを無効にすると、パフォーマンス低下が発生する可能性があります。

MaxHeapFreeRatioオプションを使用して、埋込みアプリケーションの動的フットプリントを減らすことでJavaヒープを小さく維持する方法の詳細は、「パフォーマンス・チューニングの例」を参照してください。

–XX:StringDeduplicationAgeThreshold=threshold

重複除外の候補とみなされる、指定した期間に到達しつつあるStringオブジェクトを指定します。オブジェクトの期間は、オブジェクトがガベージ・コレクションで存続した回数の測定値です。これは、殿堂入りと呼ばれることもあります。-XX:+PrintTenuringDistributionオプションを参照してください。

注意:

この期間に到達する前に古いヒープ・リージョンに昇格されたStringオブジェクトは、常に重複除外の候補とみなされます。このオプションのデフォルト値は3です。-XX:+UseStringDeduplicationオプションを参照してください。

-XX:SurvivorRatio=ratio

Eden領域サイズとSurvivor領域サイズの比率を設定します。デフォルトでは、このオプションは8に設定されます。次の例は、Eden/Survivor領域率を4に設定する方法を示しています。

-XX:SurvivorRatio=4

-XX:TargetSurvivorRatio=percent

Youngガベージ・コレクション後に使用されるSurvivor領域の目的のパーセンテージ(0から100)を設定します。デフォルトで、このオプションは50%に設定されます。

次の例は、ターゲットのSurvivor領域率を30%に設定する方法を示しています。

-XX:TargetSurvivorRatio=30

-XX:TLABSize=size

スレッドローカル割当てバッファ(TLAB)の初期サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。このオプションが0に設定されている場合、JVMは初期サイズを自動的に選択します。

次の例は、初期TLABサイズを512Kバイトに設定する方法を示しています。

-XX:TLABSize=512k

-XX:+UseAdaptiveSizePolicy

適応型世代サイズ変更の使用を有効にします。このオプションはデフォルトで有効化されています。適応型世代サイズ変更を無効にするには、-XX:-UseAdaptiveSizePolicyを指定し、メモリー割当てプールのサイズを明示的に設定します。-XX:SurvivorRatioオプションを参照してください。

-XX:+UseCMSInitiatingOccupancyOnly

CMSコレクタの開始の唯一の基準として、占有率値の使用を有効にします。デフォルトでは、このオプションは無効になっており、その他の基準を使用できます。

-XX:+UseG1GC

ガベージファースト(G1)・ガベージ・コレクタの使用を有効にします。それは、大容量のRAMを搭載するマルチプロセッサ・マシンを対象とした、サーバースタイル・ガベージ・コレクタです。このオプションは、GC一時停止時間目標を高い確率で満たしながら、優れたスループットを維持します。大きなヒープ(およそ6GB以上のサイズ)を必要とし、GC待機時間の制限の要件(0.5秒未満の安定した予測可能な一時停止時間)のあるアプリケーションには、G1コレクタをお薦めします。デフォルトでは、このオプションは有効になっており、G1がデフォルトのガーベジ・コレクタとして使用されます。

-XX:+UseGCOverheadLimit

OutOfMemoryError例外がスローされるまでに、GCへのJVMによって費やされる時間の割合を制限するポリシーを使用できます。デフォルトでは、このオプションは有効になっており、ガベージ・コレクションに合計時間の98%超が費やされ、ヒープの復元が2%未満である場合、パラレルGCによってOutOfMemoryErrorがスローされます。ヒープが小さい場合、この機能は、アプリケーションが長時間ほとんどまたはまったく進捗なしで実行することを防ぐために使用できます。このオプションを無効にするには、オプション-XX:-UseGCOverheadLimitを指定します。

-XX:+UseNUMA

アプリケーションの待機時間の短いメモリーの使用を増やすことで、NUMA (Non-Uniform Memory Architecture)を使用したマシン上のアプリケーションのパフォーマンスの最適化を有効にします。デフォルトでは、このオプションは無効になっており、NUMAの最適化は行われません。このオプションは、パラレル・ガベージ・コレクタが使用されている場合(-XX:+UseParallelGC)にのみ使用できます。

-XX:+UseParallelGC

複数のプロセッサを利用することによってアプリケーションのパフォーマンスを向上させるために、Parallel Scavengeガベージ・コレクタ(スループット・コレクタとも呼ばれる)の使用を有効にします。

デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。これを有効にすると、-XX:+UseParallelOldGCオプションも明示的に無効にしないかぎりは自動的に有効になります。

-XX:+UseParallelOldGC

フルGCのパラレル・ガベージ・コレクタの使用を有効にします。デフォルトでは、このオプションは無効になっています。それを自動的に有効にすると、-XX:+UseParallelGCオプションが有効になります。

-XX:+UseSerialGC

シリアル・ガベージ・コレクタの使用を有効にします。これは一般に、ガベージ・コレクションの特別な機能を必要としない小さく単純なアプリケーションには最適な選択です。デフォルトで、このオプションは無効になっており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。

-XX:+UseSHM

Linuxのみ: JVMで共有メモリーを使用してラージ・ページを設定できるようにします。

ラージ・ページの設定は、「ラージ・ページ」を参照してください。

-XX:+UseStringDeduplication

文字列の重複除外を有効にします。デフォルトでは、このオプションは無効になっています。このオプションを使用するには、ガベージファースト(G1)・ガベージ・コレクタを有効にする必要があります。

多くのStringオブジェクトが同じであるということから、String deduplicationにより、Javaヒープ上のStringオブジェクトのメモリー・フットプリントが削減されます。各Stringオブジェクトが独自の文字配列をポイントするのではなく、同一のStringオブジェクトは同じ文字配列をポイントし共有できます。

-XX:+UseTLAB

Young世代の領域で、スレッドローカル割当てブロック(TLAB)の使用を有効にします。このオプションはデフォルトで有効化されています。TLABの使用を無効にするには、オプション-XX:-UseTLABを指定します。

廃止されたjavaオプション

これらのjavaオプションは、引き続き使用可能ですが無視され、使用すると警告が発行されます。

-Xusealtsigs / -XX:+UseAltSigs

Oracle Solarisのみ: JVM内部シグナルとして、SIGUSR1およびSIGUSR2のかわりに代替シグナルを使用します。Solaris 10から、2つの専用シグナルがVMに対して使用できるようになったため、JDK 6から、これらのフラグは効果なしと記載されています。現在、フラグは廃止されており、使用すると警告が生成されます。将来のリリースでは、これらのフラグは完全に削除される予定です。

非推奨のjavaオプション

これらのjavaオプションは非推奨であり、将来のJDKリリースでは削除される可能性があります。これらは引き続き使用可能で作用しますが、使用すると警告が発行されます。

-d32

このオプションは非推奨となり、今後のリリースで削除される予定です。

-d64

このオプションは非推奨となり、今後のリリースで削除される予定です。

Oracle Solaris、LinuxおよびOS X: アプリケーションを64ビット環境で実行します。64ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。

Java HotSpot Server VMのみが64ビットの操作をサポートしており、-d64を使用すると-serverオプションが暗黙的に有効になります。-d64使用時には-clientオプションは無視されます。

-Xloggc:garbage-collection.log

ロギングのため、詳細GCイベント情報をリダイレクトするファイルを設定します。このファイルに書き込まれる情報は、ロギングされた各イベントの前の最初のGCイベントから経過した時間での-verbose:gcの出力と似ています。同じjavaコマンドで両方が指定された場合に、-Xloggcオプションは、-verbose:gcをオーバーライドします。

例:

-Xlog:gc:garbage-collection.log

-XX:CMSInitiatingOccupancyFraction=percent

CMSコレクション・サイクルを開始するOld世代の占有率(0から100)を設定します。デフォルト値は-1に設定されます。マイナスの値(デフォルトを含む)はオプション-XX:CMSTriggerRatioを使用して、開始の占有割合の値を定義することを意味します。

次の例は、占有の割合を20%に設定する方法を示しています。

-XX:CMSInitiatingOccupancyFraction=20

-XX:CMSInitiatingPermOccupancyFraction=percent

GCを起動するPermanent世代の占有率(0から100)を設定します。このオプションは置換えなくJDK 8で非推奨になりました。

-XX:+G1PrintHeapRegions

割り当てられる領域とG1コレクタによって再生される領域に関する情報の出力を有効にします。デフォルトでは、このオプションは無効になっています。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-XX:MaxPermSize=size

Permanent世代領域の最大サイズ(バイト単位)を設定します。このオプションはJDK 8で非推奨になり、-XX:MaxMetaspaceSizeオプションによって置き換えられました。

-XX:PermSize=size

超えた場合にガベージ・コレクションがトリガーされる、Permanent世代に割り当てられる領域(バイト単位)を設定します。このオプションはJDK 8で非推奨になり、-XX:MetaspaceSizeオプションによって置き換えられました。

-XX:+PrintGC

すべてのGCでメッセージの出力を有効にします。デフォルトでは、このオプションは無効になっています。このフラグを使用している場合は、「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。JDK 9で、このオプションは非推奨になりました。

-XX:+PrintGCApplicationConcurrentTime

最後の一時停止(GCの一時停止など)から経過した時間の出力を有効にします。デフォルトでは、このオプションは非推奨です。

-XX:+PrintGCApplicationStoppedTime

一時停止(GCの一時停止など)が続いた時間の出力を有効にします。デフォルトでは、このオプションは非推奨です

-XX:+PrintGCDateStamps

すべてのGCで日付スタンプの出力を有効にします。デフォルトでは、このオプションは非推奨です。

-XX:+PrintGCDetails

すべてのGCで詳細メッセージの出力を有効にします。デフォルトでは、このオプションは無効になっています。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-XX:+PrintGCTaskTimeStamps

個々のすべてのGCワーカー・スレッド・タスクのタイム・スタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-XX:+PrintGCTimeStamps

すべてのGCでのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-XX:+PrintStringDeduplicationStatistics

詳細な重複除外統計を印刷します。デフォルトでは、このオプションは無効になっています。-XX:+UseStringDeduplicationオプションを参照してください。

-XX:+PrintTenuringDistribution

殿堂入りの年齢情報の出力を有効にします。次に、出力の例を示します。

Desired survivor size 48286924 bytes, new threshold 10 (max 10)
- age 1: 28992024 bytes, 28992024 total
- age 2: 1366864 bytes, 30358888 total
- age 3: 1425912 bytes, 31784800 total
...

年齢1のオブジェクトはもっとも若いSurvivorです(それらは前回の清掃後に作成されたもの、最後の清掃で残ったもの、EdenからSurvivor領域に移動されたものです)。年齢2のオブジェクトは2回の清掃で残ったものです(2回目の清掃で、それらはあるSurvivor領域から次の領域にコピーされました)。このパターンは、出力のすべてのオブジェクトについて繰り返されます。

前の例で、28,992,024バイトが1回の清掃で残り、EdenからSurvivor領域にコピーされ、1,366,864バイトが年齢2のオブジェクトで占有されているというようになります。各行の3番目の値は年齢n以下のオブジェクトの累積サイズです。

デフォルトでは、このオプションは無効になっています。

-XX:SoftRefLRUPolicyMSPerMB=time

ソフトに到達可能なオブジェクトが最後に参照された後にヒープで有効なまま維持される時間の量(ミリ秒単位)を設定します。デフォルト値は、ヒープ内の空きメガバイト当たり1秒の寿命です。-XX:SoftRefLRUPolicyMSPerMBオプションは、現在のヒープ・サイズ(Java HotSpot Client VMの場合)または最大許容ヒープ・サイズ(Java HotSpot Server VMの場合)の1メガバイト当たりのミリ秒を表す整数値を受け付けます。この違いは、Client VMがヒープを拡大するより、ソフト参照をフラッシュする傾向があり、Server VMがソフト参照をフラッシュするより、ヒープを拡大する傾向があることを意味します。後者の場合、-Xmxオプションの値は、ソフト参照がガベージ・コレクションされる速さに大きく影響します。

次の例は、値を2.5秒に設定する方法を示しています。

-XX:SoftRefLRUPolicyMSPerMB=2500

-XX:+TraceClassLoading

クラスがロードされたときに、それらの追跡を有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。

置換統合ロギングの構文は、-Xlog:class+load=levelです。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

通常の情報にlevel=infoを使用するか、追加の情報にlevel=debugを使用します。統合ロギングの構文では、-verbose:classは-Xlog:class+load=info,class+unload=infoと等価です。

-XX:+TraceClassLoadingPreorder

ロードされたすべてのクラスの追跡をそれらが参照される順番で有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。

置換統合ロギングの構文は、-Xlog:class+preorder=debugです。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-XX:+TraceClassResolution

定数プールの解決の追跡を有効にします。デフォルトでは、このオプションは無効になっており、定数プールの解決は追跡されません。

置換統合ロギングの構文は、-Xlog:class+resolve=debugです。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-XX:+TraceClassUnloading

クラスがアンロードされたときに、それらの追跡を有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。

置換統合ロギングの構文は、-Xlog:class+unload=levelです。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

通常の情報にlevel=infoを使用し、追加の情報にlevel=traceを使用します。統合ロギングの構文では、-verbose:classは-Xlog:class+unload=info,class+unload=infoと等価です。

-XX:+TraceLoaderConstraints

ローダーの制約の記録の追跡を有効にします。デフォルトでは、このオプションは無効になっており、ローダー制約の記録は追跡されません。

置換統合ロギングの構文は、-Xlog:class+loader+constraints=infoです。「JVM統合ロギングフレームワークを使用したロギングの有効化」を参照してください。

-XX:+UseConcMarkSweepGC

Old世代のCMSガベージ・コレクタの使用を有効にします。CMSは、デフォルトのガーベジ・コレクタ(G1)にかわるものであり、アプリケーションの待機時間要件を満たすことに重点を置いています。デフォルトで、このオプションは無効になっており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。JDK 9で、CMSガーベジ・コレクタは非推奨になりました。

-XX:+UseParNewGC

Young世代のコレクションにパラレル・スレッドの使用を有効にします。デフォルトでは、このオプションは無効になっています。-XX:+UseConcMarkSweepGCオプションを設定すると、自動的に有効になります。-XX:+UseConcMarkSweepGCオプションを使用せずに-XX:+UseParNewGCオプションを使用することは、JDK 8で非推奨になりました。JDK 9から、-XX:+UseParNewGCオプションの使用はすべて非推奨になりました。-XX:+UseConcMarkSweepGCを指定しないでオプションを使用することはできません。

-XX:+UseSplitVerifier

検証プロセスの分割を有効にします。デフォルトで、このオプションは前のリリースで有効にされており、検証は型参照(コンパイラによって実行)と型チェック(JVMランタイムによって実行)の2つのフェーズに分割されていました。検証はデフォルトで分割されるようになり、無効にする方法はありません。

削除されたjavaオプション

これらのjavaオプションはJDK 9で削除され、使用するとエラーになります。

Unrecognized VM option option-name

-d32

Oracle Solaris、LinuxおよびOS X: アプリケーションを32ビット環境で実行しました。32ビット版のJDK/JREはサポートされなくなりました。

注意:

-d32オプションおよび-d64オプションは、複数のアーキテクチャ(データ・モデル)のJDKおよびJREが同じシステム上で共存できるように追加されました。ユーザーは、これらのランチャ・オプションを使用して他のデータ・モデルを起動できました。Oracle Solarisは、これらのオプションをサポートする唯一のプラットフォームでしたが、32ビット版のJDK/JREはサポートされなくなりました。

-Xincgc

インクリメンタル・ガベージ・コレクションを有効にしました。このオプションおよびGCモードは、JDK 9で削除されました。

-Xmaxjitcodesize=size

JITでコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を指定しました。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトの最大コード・キャッシュ・サイズは240MBです。オプション-XX:-TieredCompilationを使用して階層化コンパイルを無効にした場合、デフォルトのサイズは48MBです。

-Xmaxjitcodesize=240m

このオプションは-XX:ReservedCodeCacheSizeと同等です。

-Xrunlibname

指定されたデバッグ/プロファイリング・ライブラリをロードしました。このオプションは-agentlibオプションによって置き換えられました。

-XX:CMSIncrementalDutyCycle=percent

並行コレクタが実行を許可されるマイナー・コレクション間の時間のパーセンテージ(0から100)を設定しました。

-XX:CMSIncrementalDutyCycleMin=percent

-XX:+CMSIncrementalPacingオプションが有効になっている場合に、デューティ・サイクルの下限であるマイナー・コレクション間の時間のパーセンテージ(0から100)を設定しました。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。インクリメンタル・モード全体が削除されたため、このオプションはJDK 9で削除されました。

-XX:+CMSIncrementalMode

インクリメンタル・モードを有効にしました。このオプションが機能するためには、(-XX:+UseConcMarkSweepGCを使用して)CMSコレクタも有効にする必要があります。インクリメンタル・モード全体が削除されたため、このオプションはJDK 9で削除されました。

-XX:CMSIncrementalOffset=percent

インクリメンタル・モード・デューティ・サイクルがマイナー・コレクション間の期間内に右側に移動される時間のパーセンテージ(0から100)を設定しました。

-XX:+CMSIncrementalPacing

JVMの実行中に収集された統計情報に基づいたインクリメンタル・モード・デューティ・サイクルの自動調整を有効にしました。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなしに非推奨になりました。インクリメンタル・モード全体が削除されたため、このオプションは削除されました。

-XX:CMSIncrementalSafetyFactor=percent

デューティ・サイクルの計算時に、保守性を追加するために使用される時間のパーセンテージ(0から100)を設定しました。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。インクリメンタル・モード全体が削除されたため、このオプションは削除されました。

-XX:CodeCacheMinimumFreeSpace=size

コンパイルに必要な最小空き領域(バイト単位)を設定しました。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。残りが最小空き領域より少なくなると、コンパイルは停止しました。デフォルトでは、このオプションは500KBに設定されました。

javaのコマンド行引数ファイル

javaコマンドを短くしたり簡潔にするために、@argument filesを使用してjavaコマンドに渡すオプションやクラス名などの引数が含まれるテキスト・ファイルを指定できます。このことを利用すれば、どのオペレーティング・システム上でも、任意の長さのjavaコマンドを作成できます。

コマンド行で、アット記号(@)接頭辞を使用してjavaオプションとクラス名が含まれる引数ファイルを指定します。javaコマンドは、アット記号(@)で始まるファイルを見つけると、コマンド行で指定されるようにそのファイルの内容を展開して引数リストに挿入します。

javaランチャは、-Xdisable-@filesオプションを見つけるまで引数ファイルの内容を展開します。-Xdisable-@filesオプションは、引数ファイル内を含めコマンド行の任意の場所で使用して、@{argument files}が展開されないようにすることができます。

次の各項目では、java引数ファイルの構文について説明します。

- 引数ファイルでは、ASCII文字またはASCIIと親和性の高いUTF-8などのシステムのデフォルト・エンコーディングの文字のみを使用する必要があります。

- 引数ファイルのサイズは、MAXINT (2,147,483,647)バイト以下にする必要があります。

- ランチャは、引数ファイル内に存在するワイルドカードを展開しません。

- 空白文字または改行文字を使用して、ファイルに含まれる引数を区切ります。

- 空白には、空白文字\t、\n、\rおよび\fがあります。
たとえば、"c:\\Program Files"とも、エスケープを避けてc:\Program" "Filesとも指定できるc:\Program Filesのような、空白が含まれるパスを指定できます。

- パス・コンポーネントなどの空白が含まれるオプションは、引用符文字('"')を使用して全体を引用符で囲む必要があります。

- 引用符で囲む文字列には、文字\n、\r、\tおよび\fを含めることができます。これらは対応するASCIIコードに変換されます。

- ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。

- 引数ファイル内のファイル名は、現在のディレクトリから相対的で、引数ファイルの場所に対してではありません。

- 番号記号#を引数ファイルで使用して、コメントを指定します。#の後の文字はすべて、行末まで無視されます。

- アット記号@が先頭に付いているオプションに@をさらに付けると、エスケープとして機能します(最初の@は削除され、残りの引数がランチャにリテラルとして渡されます)。

- 行は、行末で継続文字(\)を使用すると継続できます。先頭の空白が切り捨てられて2行が連結されます。先頭の空白が切り捨てられないようにするには、継続文字(\)を1列目に入れます。

- バックスラッシュ(\)はエスケープ文字であるため、バックスラッシュ文字は別のバックスラッシュ文字でエスケープする必要があります。

- 部分引用は可能で、ファイルの終わりで閉じられます。

- \が最後の文字でないかぎり、オープン状態の引用は行末で終了するため、先頭の空白文字をすべて削除して次の行に連結されます。

- このようなリストでは、ワイルドカード(*)は使用できません(たとえば、*.javaとは指定できません)。

- ファイルを再帰的に解釈するためのアット記号(@)の使用はサポートされていません。

引数ファイルでのオープン状態の引用または部分引用の例

引数ファイルの内容が次の場合、

-cp "lib/
cool/
app/
jars

これは、次のように解析されます。

-cp lib/cool/app/jars

引数ファイルでの別のバックスラッシュ文字でエスケープされたバックスラッシュ文字の例

次のように出力するには、

-cp c:\Program Files (x86)\Java\jre\lib\ext;c:\Program Files\Java\jre9\lib\ext

次のように引数ファイルでバックスラッシュ文字を指定する必要があります。

-cp  "c:\\Program Files (x86)\\Java\\jre\\lib\\ext;c:\\Program Files\\Java\\jre9\\lib\\ext"

引数ファイルで行の連結の強制に使用されるEOLエスケープの例

引数ファイルの内容が次の場合、

-cp "/lib/cool app/jars:\
/lib/another app/jars"

これは、次のように解析されます。

-cp /lib/cool app/jars:/lib/another app/jars

引数ファイルでの先頭に空白がある行連結の例

引数ファイルの内容が次の場合、

-cp "/lib/cool\
\app/jars”

これは、次のように解析されます。

-cp /lib/cool app/jars

単一の引数ファイルの使用例

単一の引数ファイル(次の例のmyargumentfileなど)を使用して、必要なjava引数をすべて保持することができます。

java @myargumentfile

パス付きの引数ファイルの使用例

引数ファイルには相対パスを挿入できますが、これらは現在の作業ディレクトリに対して相対的であり、引数ファイル自体のパスに対してではありません。次の例では、path1/optionsおよびpath2/optionsは、異なるパスの引数ファイルを表しています。それらに含まれる相対パスはいずれも、現在の作業ディレクトリに対して相対的であり、引数ファイルに対してではありません。

java @path1/options @path2/classes

JVM統合ロギングフレームワークを使用したロギングの有効化

-Xlogオプションを使用してJava仮想マシン(JVM)統合ロギング・フレームワークを使用したロギングを構成または有効にします。

形式

-Xlog[:[what][:[output][:[decorators][:output-options [,...]]]]]

what

タグとレベルの組合せを形式tag1[+tag2...][*][=level][,...]で指定します。ワイルドカード(*)が指定されている場合を除き、指定されたとおりのタグでタグ付けされたログ・メッセージのみが照合されます。「-Xlogのタグおよびレベル」を参照してください。

output

出力のタイプを設定します。outputを省略すると、タイプはデフォルトでstdoutになります。「-Xlogの出力」を参照してください。

decorators

カスタムのデコレータ・セットを使用するように出力を構成します。decoratorsを省略すると、デフォルトでuptime、levelおよびtagsになります。「デコレーション」を参照してください。

output-options

-Xlogロギング出力オプションを設定します。

説明

Java仮想マシン(JVM)統合ロギング・フレームワークは、JVMのすべてのコンポーネントに対して共通のロギング・システムを提供します。JVMのGCロギングは、新しいロギング・フレームワークを使用するように変更されています。古いGCフラグの対応する新しいXlog構成とのマッピングは、「XlogへのGCロギング・フラグの変換」を参照してください。また、ランタイム・ロギングもJVM統合ロギング・フレームワークを使用するように変更されています。従来のランタイム・ロギング・フラグの対応する新しいXlog構成とのマッピングは、「Xlogへのランタイム・ロギング・フラグの変換」を参照してください。

-Xlogコマンドとオプションの構文についてのクイック・リファレンスを次に示します。

-Xlog

infoレベルでのJVMロギングを有効にします。

-Xlog:help

-Xlog使用構文と使用可能なタグ、レベルおよびデコレータの他、説明付きのコマンド行の例を出力します。

-Xlog:disable

すべてのロギングをオフにし、警告およびエラーに関するデフォルト構成を含め、ロギング・フレームワークのすべての構成をクリアします。

-Xlog[:option]

コマンド行で表示される順で複数の引数を適用します。同じ出力に対する複数の-Xlog引数は、指定された順序で相互にオーバーライドされます。

optionは、次のように設定します。

[tag selection][:[output][:[decorators][:output-options]]]

tag selectionを省略すると、デフォルトでallタグ・セットとinfoレベルになります。

tag[+...] all

allタグは、すべての使用可能なタグ・セットで構成されるメタ・タグです。タグ・セット定義内のアスタリスク*は、ワイルドカードのタグ照合を示します。ワイルドカードによる照合では、少なくとも指定したタグが含まれるすべてのタグ・セットが選択されます。ワイルドカードを指定しないと、指定したタグ・セットと完全に一致するものしか選択されません。

output_optionsは次のとおりです。

filecount=file count filesize=file size with optional K, M or G suffix

デフォルトの構成

コマンド行に-Xlogオプションのみを指定して他には指定しないと、デフォルトの構成が使用されます。デフォルトの構成では、メッセージが関連付けられているタグに関係なく、警告またはエラーのいずれかと一致するレベルのメッセージをすべて記録します。デフォルトの構成は、コマンド行で次を入力するのと同等です。

-Xlog:all=warning:stdout:uptime,level,tags

実行時のロギングの制御

ロギングは、診断コマンドによって(jcmdユーティリティを使用して)実行時に制御することもできます。コマンド行に指定できるものはすべて、VM.logコマンドで動的に指定することもできます。診断コマンドはMBeanとして自動的に公開されるため、JMXを使用して実行時にロギング構成を変更できます。

-Xlogのタグおよびレベル

各ログ・メッセージには、レベルとタグ・セットが関連付けられています。メッセージのレベルはその詳細に対応し、タグ・セットはメッセージの内容やメッセージに含まれるJVMコンポーネント(GC、コンパイラ、スレッドなど)に対応します。GCフラグとXlog構成とのマッピングの詳細は、「XlogへのGCロギング・フラグの変換」を参照してください。従来のランタイム・ロギング・フラグの対応するXlog構成とのマッピングは、「Xlogへのランタイム・ロギング・フラグの変換」を参照してください。

使用可能なログ・レベル:

- off

- trace

- debug

- info

- warning

- error

使用可能なログ・タグ:

使用可能なログ・タグは、次のとおりです。タグの組合せのかわりにallを指定すると、すべてのタグの組合せと一致します。

- add

- age

- alloc

- annotation

- aot

- arguments

- attach

- barrier

- biasedlocking

- blocks

- bot

- breakpoint

- bytecode

- census

- class

- classhisto

- cleanup

- compaction

- comparator

- constraints

- constantpool

- coops

- cpu

- cset

- data

- defaultmethods

- dump

- ergo

- event

- exceptions

- exit

- fingerprint

- freelist

- gc

- hashtables

- heap

- humongous

- ihop

- iklass

- init

- itables

- jfr

- jni

- jvmti

- liveness

- load

- loader

- logging

- mark

- marking

- metadata

- metaspace

- method

- mmu

- modules

- monitorinflation

- monitormismatch

- nmethod

- normalize

- objecttagging

- obsolete

- oopmap

- os

- pagesize

- parser

- patch

- path

- phases

- plab

- preorder

- promotion

- protectiondomain

- purge

- redefine

- ref

- refine

- region

- remset

- resolve

- safepoint

- scavenge

- scrub

- setting

- stackmap

- stacktrace

- stackwalk

- start

- startuptime

- state

- stats

- stringdedup

- stringtable

- subclass

- survivor

- sweep

- system

- task

- thread

- time

- timer

- tlab

- unload

- update

- verification

- verify

- vmoperation

- vtables

- workgang

-Xlogの出力

-Xlogオプションでは、次のタイプの出力がサポートされます。

- stdout — 出力をstdoutに送信します

- stderr — 出力をstderrに送信します

- file=filename — 出力をテキスト・ファイルに送信します。

file=filenameを使用する際、%pまたは%t (あるいはその両方)をファイル名に指定すると、JVMのPIDと起動タイムスタンプにそれぞれ展開されます。ファイル・サイズおよびローテーションするファイル数に基づいてファイル・ローテーションを処理するように、テキスト・ファイルを構成することもできます。たとえば、ログ・ファイルを10MBごとにローテーションし、5ファイルをローテーションで保持するには、オプションfilesize=10M, filecount=5を指定します。ファイルのターゲット・サイズは正確には保証されず、おおよその値となります。デフォルトでは、他の内容で構成されている場合を除いて、ターゲット・サイズが20MBのファイルを最大5つまで使用してローテーションされます。filecount=0を指定すると、ログ・ファイルはローテーションされません。既存のログ・ファイルが上書きされる可能性があります。

デコレーション

ロギング・メッセージは、メッセージに関する情報でデコレーションされます。デコレータのカスタム・セットを使用するように各出力を構成できます。出力の順序は常に、表に示される順序と同じです。実行時に使用されるようにデコレーションを構成できます。デコレーションは、ログ・メッセージの先頭に付けられます。例:

[6.567s][info][gc,old] Old collection complete

decoratorsを省略すると、デフォルトでuptime、levelおよびtagsになります。noneデコレータは特殊で、すべてのデコレーションをオフにする場合に使用します。

time (t)、utctime (utc)、uptime (u)、timemillis (tm)、uptimemillis (um)、timenanos (tn)、uptimenanos (un)、hostname (hn)、pid (p)、tid (ti)、level (l)、tags (tg)の各デコレータも、デコレーションなしのnoneのように指定することができます。

デコレーション

説明

timeまたはt

ISO-8601形式の現在の日付と時刻。

utctimeまたはutc

協定世界時。

uptimeまたはu

JVMが起動してからの時間(秒およびミリ秒)。例: 6.567s。

timemillisまたはtm

System.currentTimeMillis()によって生成されるのと同じ値。

uptimemillisまたはum

JVMが起動してからのミリ秒数。

timenanosまたはtn

System.nanoTime()によって生成されるのと同じ値。

uptimenanosまたはun

JVMが起動してからのナノ秒数。

hostnameまたはhn

ホスト名。

pidまたはp

プロセス識別子。

tidまたはti

スレッド識別子。

levelまたはl

ログ・メッセージに関連付けられたレベル。

tagsまたはtg

ログ・メッセージに関連付けられたタグ・セット。

XlogへのGCロギング・フラグの変換

表2-1 従来のガーベジ・コレクションのロギング・フラグとXlog構成とのマッピング

従来のガーベジ・コレクション(GC)のフラグ

Xlog構成

説明

G1PrintHeapRegions

-Xlog:gc+region=trace

なし

GCLogFileSize

使用可能な構成はありません

ログ・ローテーションはフレームワークによって処理されます。

NumberOfGCLogFiles

なし

ログ・ローテーションはフレームワークによって処理されます。

PrintAdaptiveSizePolicy

-Xlog:ergo*=level

ほとんどの情報にdebugのlevelを使用するか、PrintAdaptiveSizePolicyについて記録されたすべての情報にtraceのlevelを使用します。

PrintGC

-Xlog:gc

なし

PrintGCApplicationConcurrentTime

-Xlog:safepoint

PrintGCApplicationConcurrentTimeおよびPrintGCApplicationStoppedTimeは、同じタグで記録されるため、新しいロギングでは分けられません。

PrintGCApplicationStoppedTime

-Xlog:safepoint

PrintGCApplicationConcurrentTimeおよびPrintGCApplicationStoppedTimeは、同じタグで記録されるため、新しいロギングでは分けられません。

PrintGCCause

なし

GCの原因は常に記録されるようになりました。

PrintGCDateStamps

なし

データ・スタンプはフレームワークによって記録されます。

PrintGCDetails

-Xlog:gc*

なし

PrintGCID

なし

GC IDは常に記録されるようになりました。

PrintGCTaskTimeStamps

-Xlog:task*=debug

なし

PrintGCTimeStamps

なし

タイム・スタンプはフレームワークによって記録されます。

PrintHeapAtGC

-Xlog:gc+heap=trace

なし

PrintReferenceGC

-Xlog:ref*=debug

古いロギングでは、PrintReferenceGCが有効なのはPrintGCDetailsも有効になっている場合のみでした。

PrintStringDeduplicationStatistics

-Xlog:stringdedup*=debug

なし

PrintTenuringDistribution

-Xlog:age*=level

ほとんどの関連情報にdebugのlevelを使用するか、PrintTenuringDistributionについて記録されたすべての情報にtraceのlevelを使用します。

UseGCLogFileRotation

なし

PrintTenuringDistributionについて記録された情報。

Xlogへのランタイム・ロギング・フラグの変換

表2-2 ランタイム・ロギング・フラグとXlog構成とのマッピング

従来のランタイム・フラグ

Xlog構成

説明

TraceExceptions

-Xlog:exceptions=info

なし

TraceClassLoading

-Xlog:class+load=level

通常の情報にlevel=infoを使用するか、追加の情報にlevel=debugを使用します。統合ロギングの構文では、-verbose:classは-Xlog:class+load=info,class+unload=infoと等価です。

TraceClassLoadingPreorder

-Xlog:class+preorder=debug

なし

TraceClassUnloading

-Xlog:class+unload=level

通常の情報にlevel=infoを使用するか、追加の情報にlevel=traceを使用します。統合ロギングの構文では、-verbose:classは-Xlog:class+load=info,class+unload=infoと等価です。

VerboseVerification

-Xlog:verification=info

なし

TraceClassPaths

-Xlog:class+path=info

なし

TraceClassResolution

-Xlog:class+resolve=debug

なし

TraceClassInitialization

-Xlog:class+init=info

なし

TraceLoaderConstraints

-Xlog:class+loader+constraints=info

なし

TraceClassLoaderData

-Xlog:class+loader+data=level

通常の情報にlevel=debugを使用するか、追加の情報にlevel=traceを使用します。

TraceSafepointCleanupTime

-Xlog:safepoint+cleanup=info

なし

TraceSafepoint

-Xlog:safepoint=debug

なし

TraceMonitorInflation

-Xlog:monitorinflation=debug

なし

TraceBiasedLocking

-Xlog:biasedlocking=level

通常の情報にlevel=infoを使用するか、追加の情報にlevel=traceを使用します。

TraceRedefineClasses

-Xlog:redefine+class*=level

level=info、=debugおよび=traceは、情報の増加量を示します。

-Xlogの使用例

次に、-Xlogの例を示します。

-Xlog

すべてのメッセージを、infoレベルを使用してuptime、levelsおよびtagsのデコレーションでstdoutに記録します。これは、次を使用するのと同等です。

-Xlog:all=info:stdout:uptime,levels,tags

-Xlog:gc

gcタグでタグ付けされたメッセージを、infoレベルを使用してstdoutに記録します。レベルwarningの他のすべてのメッセージに対するデフォルトの構成は有効です。

-Xlog:gc,safepoint

gcタグまたはsafepointタグのいずれかでタグ付けされたメッセージを、どちらもinfoレベルを使用してデフォルトのデコレーションでstdoutに記録します。gcとsafepointの両方でタグ付けされたメッセージは記録されません。

-Xlog:gc+ref=debug

gcとrefの両方のタグでタグ付けされたメッセージを、debugレベルを使用してデフォルトのデコレーションでstdoutに記録します。この2つのタグのいずれかのみでタグ付けされたメッセージは記録されません。

-Xlog:gc=debug:file=gc.txt:none

gcタグでタグ付けされたメッセージを、debugレベルを使用してデコレーションなしでgc.txtと呼ばれるファイルに記録します。レベルwarningの他のすべてのメッセージに対するデフォルトの構成は引き続き有効です。

-Xlog:gc=trace:file=gctrace.txt:uptimemillis,pids:filecount=5,filesize=1024

gcタグでタグ付けされたメッセージを、traceレベルを使用してローテーションするファイル・セット(サイズ1MBのファイルを5つ使用し、ベース名がgctrace.txt)に記録し、デコレーションuptimemillisおよびpidを使用します。

レベルwarningの他のすべてのメッセージに対するデフォルトの構成は引き続き有効です。

-Xlog:gc::uptime,tid

gcタグでタグ付けされたメッセージをデフォルト・レベル'info'を使用してデフォルト出力stdoutに記録し、デコレーションuptimeおよびtid使用します。レベルwarningの他のすべてのメッセージに対するデフォルトの構成は引き続き有効です。

-Xlog:gc*=info,safepoint*=off

infoレベルを使用して少なくともgcでタグ付けされたメッセージを記録しますが、safepointでタグ付けされたメッセージのロギングをオフにします。gcとsafepointの両方でタグ付けされたメッセージは記録されません。

-Xlog:disable -Xlog:safepoint=trace:safepointtrace.txt

警告およびエラーを含めてすべてのロギングをオフにした後、safepointでタグ付けされたメッセージを、traceレベルを使用してファイルsafepointtrace.txtに対して有効にします。コマンド行が-Xlog:disableで開始されているため、デフォルトの構成は適用されません。

複雑な-Xlogの使用例

-Xlogオプションを使用した複雑な例をいくつか次に示します。

-Xlog:gc+class*=debug

少なくともgcタグとclassタグでタグ付けされたメッセージを、debugレベルを使用してstdoutに記録します。レベルwarningの他のすべてのメッセージに対するデフォルトの構成は引き続き有効です

-Xlog:gc+meta*=trace,class*=off:file=gcmetatrace.txt

少なくともgcタグおよびmetaタグでタグ付けされたメッセージを、traceレベルを使用してファイルmetatrace.txtに記録しますが、classでタグ付けされたメッセージはすべてオフにします。gc、metaおよびclassでタグ付けされたメッセージは、class*がoffに設定されているため、記録されません。レベルwarningの他のすべてのメッセージに対するデフォルトの構成は、classが含まれるメッセージを除いて有効です。

-Xlog:gc+meta=trace

gcおよびmetaに完全一致するタグでタグ付けされたメッセージを、traceレベルを使用してstdoutに記録します。レベルwarningの他のすべてのメッセージに対するデフォルトの構成は引き続き有効です。

-Xlog:gc+class+heap*=debug,meta*=warning,threads*=off

少なくともgcタグ、classタグおよびheapタグでタグ付けされたメッセージを、traceレベルを使用してstdoutに記録しますが、metaでタグ付けされたメッセージのみwarningレベルを使用します。レベルwarningの他のすべてのメッセージに対するデフォルトの構成は、threadsが含まれるメッセージを除いて有効です。

Java仮想マシンのフラグ引数の検証

検証対象のすべてのJava仮想マシン(JVM)コマンド行フラグに指定された値を使用していて、入力値が無効である場合または範囲外である場合は、適切なエラー・メッセージが表示されます。

コマンド行、入力ツール、API (パッケージjava.lang.managementに含まれるクラスなど)のいずれを使用して人間工学に基づいて設定されていようと、すべてのJava仮想マシン(JVM)のコマンド行フラグに指定された値は検証されます。人間工学の詳細は、Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイドを参照してください。
範囲および制約は、すべてのフラグの値がJVMの初期化中に設定されたとき、またはフラグの値が実行時に(jcmdツールを使用するなどして)変更されたときに検証されます。値が範囲または制約チェックに違反した場合、JVMは終了し、該当するエラー・メッセージがエラー・ストリームに出力されます。

たとえば、フラグが範囲または制約チェックに違反すると、JVMはエラーで終了します。

java -XX:AllocatePrefetchStyle=5 -version
intx AllocatePrefetchStyle=5 is outside the allowed range [ 0 ... 3 ]
Improperly specified VM option 'AllocatePrefetchStyle=5'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

フラグ-XX:+PrintFlagsRangesは、すべてのフラグの範囲を出力します。このフラグを使用すると、範囲によって指定された値でフラグを自動的にテストすることが可能になります。範囲が指定されているフラグについて、型、名前および実際の範囲が出力されます。

次に例を示します。

intx   ThreadStackSize [ 0 ... 9007199254740987 ] {pd product}
範囲が指定されていないフラグの場合は、値が出力に表示されません。次に例を示します。

size_t NewSize         [   ...                  ] {product}
これは、実装する必要があるフラグの特定に役立ちます。自動テスト・フレームワークでは、値がなく実装されないフラグをスキップできます。

ラージ・ページ

ヒュージ・ページとも呼ばれるラージ・ページは、標準のメモリー・ページ・サイズ(プロセッサおよびオペレーティング・システムによって異なります)よりはるかに大きいメモリー・ページとして使用します。ラージ・ページは、プロセッサのTranslation-Lookaside Bufferを最適化します。

Translation-Lookaside Buffer (TLB)は、最近使用された仮想から物理へのアドレス変換を保持するページ変換キャッシュです。TLBは、少ないシステム・リソースです。プロセッサが複数のメモリー・アクセスが必要な場合のある階層ページ表から読み取る必要があるため、TLBミスは負荷がかかる可能性があります。大きいメモリー・ページ・サイズを使用して、単一のTLBエントリで大きいメモリー範囲を表すことができます。これにより、TLB不足が少なくなり、メモリー集約型のアプリケーションのパフォーマンスが向上する可能性があります。

ただし、ラージ・ページのページ・メモリーは、システムのパフォーマンスに悪影響を与える場合があります。たとえば、大量のメモリーがアプリケーションで確保される場合、通常メモリー不足や他のアプリケーションの過剰なページングが発生し、システム全体が遅くなる可能性があります。また、長時間稼働しているシステムは、過剰な断片化が発生する可能性があります。これにより、十分な大きさのページ・メモリーを予約できない可能性があります。これが発生した場合、OSまたはJVMのいずれかが通常のページの使用に戻ります。

ラージ・ページのサポート

Oracle Solaris、LinuxおよびWindows Server 2003では、ラージ・ページをサポートします。

Oracle Solarisでのラージ・ページのサポート

Oracle Solaris 9以降には、Multiple Page Size Support (MPSS)が組み込まれています。追加の構成は必要ありません。機能および利点 - スケーラビリティを参照してください。

Linuxでのラージ・ページのサポート

2.6カーネルは、ラージ・ページをサポートします。一部のベンダーは、2.4ベースのリリースのコードをバックポートしています。システムがラージ・ページ・メモリーをサポートしているかどうかを確認するには、次を試行してください:

# cat /proc/meminfo | grep Huge
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB

出力に3つの"Huge"変数が示されている場合、システムはラージ・ページ・メモリーをサポートしていますが、構成する必要があります。コマンドが何も出力しない場合、システムはラージ・ページをサポートしていません。ラージ・ページ・メモリーを使用するシステムを構成するには、rootとしてログインして、次の手順を実行してください:

1. オプション-XX:+UseSHM (-XX:+UseHugeTLBFSのかわり)を使用する場合、SHMMAX値を増やしますJavaヒープ・サイズより大きくする必要があります。4GB以下の物理RAMを搭載するシステムでは、次によりすべてのメモリーが共有可能になります。

# echo 4294967295 > /proc/sys/kernel/shmmax

2. オプション-XX:+UseSHMまたは-XX:+UseHugeTLBFSを使用する場合、ラージ・ページの数を指定します。次の例では、4GBシステムの3GBがラージ・ページに予約されます(2048KBのラージ・ページ・サイズを仮定する場合、3GB = 3 * 1024MB = 3072MB = 3072 * 1024KB = 3145728KB and 3145728KB / 2048KB = 1536):

# echo 1536 > /proc/sys/vm/nr_hugepages

注意:

- システムを再起動した後に/procに含まれる値がリセットされるため、初期化スクリプト(rc.localやsysctl.confなど)で設定できます。

- OSカーネル・パラメータ/proc/sys/kernel/shmmaxまたは/proc/sys/vm/nr_hugepagesを構成(またはサイズ変更)する場合、JavaプロセスがJavaヒープ以外の領域に対してラージ・ページを割り当てることがあります。これらの手順を使用して、次の領域に対してラージ・ページを割り当てることができます:

- Javaヒープ

- コード・キャッシュ

- パラレルGCのマーキング・ビットマップ・データ構造

その結果、Javaヒープのサイズにnr_hugepagesパラメータを構成すると、領域のサイズが非常に大きいためにJVMがラージ・ページのコード・キャッシュ領域の割当てに失敗する場合があります。

Windows Server 2003でのラージ・ページのサポート

Windows Server 2003のみ、ラージ・ページをサポートします。この機能を使用するには、管理者は最初に追加の権限をアプリケーションを実行するユーザーに割り当てる必要があります。

1. 「コントロール パネル」→「管理ツール」→「ローカル セキュリティ ポリシー」を選択します。

2. 「ローカル ポリシー」を選択し、「ユーザー権利の割り当て」をクリックします。

3. 「メモリ内のページのロック」をダブルクリックしてユーザーまたはグループを追加します。

4. システムを再起動します。

デフォルトでは、管理者はメモリー内のページをロックする権限がないため、アプリケーションを実行する管理者でもこれらの手順が必要であることに注意してください。

アプリケーション・クラス・データ共有

アプリケーション・クラス・データ共有(AppCDS)は、クラス・データ共有を拡張して、アプリケーション・クラスを共有アーカイブに配置できるようにします。

コア・ライブラリ・クラスに加えて、AppCDSでは、次の場所からのクラス・データ共有がサポートされています。

- モジュール・イメージのプラットフォーム・クラス

- モジュール・イメージのアプリケーション・クラス

- -cpパスのアプリケーション・クラス

注意:

JDK 9では、モジュール・パスのアプリケーション・クラスはAppCDSでサポートされていません。

複数のJVMプロセスが実行されているとき、AppCDSは、読取り専用メタデータについてメモリー共有を使用してランタイム・フットプリントを削減します。

これは、-XX:+UnlockCommercialFeaturesを指定する必要がある商用機能です。

共有アーカイブ・ファイルの作成と、それを使用したアプリケーションの実行

次のステップで、test.Helloアプリケーションで使用されるすべてのクラスを含む共有アーカイブ・ファイルを作成します。最後のステップで、共有アーカイブ・ファイルを持つアプリケーションを実行します。

1. test.Helloアプリケーションで使用されるすべてのクラスのリストを作成します。次のコマンドは、このアプリケーションで使用されるすべてのクラスのリストを含む、hello.classlistという名前のファイルを作成します。

java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello

-cpパラメータがJARファイルのみを含む必要がある点に注意してください。-XX:+UseAppCDSオプションは、ディレクトリ名を含むクラス・パスをサポートしません。

2. hello.classlist内のすべてのクラスを含む、hello.jsaという名前の共有アーカイブを作成します。

java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar

アーカイブ作成時に使用された-cpパラメータは、実行時に使用された-cpと同一(または、その接頭辞)である必要があることに注意してください。

3. 共有アーカイブhello.jsaを持つアプリケーションtest.Helloを実行します。

java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello

オプション-Xshare:onまたは-Xshare:autoを指定していることを確認します。このオプションを指定しない場合、-Xshare:autoがデフォルトです。

4. オプション: test.Helloアプリケーションが、hello.jsa共有アーカイブに含まれるクラスを使用していることを確認します。

java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar -verbose:class test.Hello

このコマンドの出力は、次のテキストを含んでいる必要があります。

Loaded test.Hello from shared objects file by sun/misc/Launcher$AppClassLoader

複数アプリケーション・プロセス全体での共有アーカイブの共有

複数アプリケーション・プロセス間で同じアーカイブ・ファイルを共有できます。アーカイブはプロセスのアドレス空間にメモリー・マップされるため、これによりメモリー使用量が低下します。オペレーティング・システムは、これらのプロセス全体で読取り専用ページを自動的に共有します。

次の手順に、様々なアプリケーションで共有可能な共通アーカイブを作成する方法を示します。common.jarのクラスのみがcommon.jsaにアーカイブされます(手順3)。hello.jarおよびhi.jarのクラスは、アーカイブ手順(手順3)時に-cpパスにないため、この特定の例ではアーカイブされません。

hello.jarおよびhi.jarのクラスを含めるには、.jarファイルを-cpパスに追加する必要があります。

1. Helloアプリケーションで使用されるすべてのクラスのリストと、Hiアプリケーションに関する別のリストを作成します。

java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp common.jar:hello.jar Hello

java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hi.classlist -XX:+UseAppCDS -cp common.jar:hi.jar Hi

2. 共有アーカイブ・ファイルを共有するすべてのアプリケーションで使用されるクラスの単一のリストを作成します。
Oracle Solaris、LinuxおよびOS X: 次のコマンドは、ファイルhello.classlistおよびhi.classlistを、1つのファイルcommon.classlistに結合します。

cat hello.classlist hi.classlist > common.classlist

Windows: 次のコマンドは、ファイルhello.classlistおよびhi.classlistを、1つのファイルcommon.classlistに結合します。

type hello.classlist hi.classlist > common.classlist

3. common.classlist内のすべてのクラスを含む、common.jsaという名前の共有アーカイブを作成します。

java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -XX:SharedClassListFile=common.classlist -cp common.jar:hello.jar:hi.jar

-cpパラメータの値は、HelloおよびHiアプリケーションで共有される共通のクラス・パス接頭辞です。

4. 同一の共有アーカイブを持つHelloおよびHiアプリケーションを実行します。

java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar:hi.jar Hello

java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar:hi.jar Hi

アーカイブ・ファイルに追加されるその他の共有データの指定

-XX:SharedArchiveConfigFile=shared_config_file

このオプションは、アーカイブ・ファイルに追加されるその他の共有データを指定する場合に使用します。JDK 9では、文字列およびシンボルがサポートされます。文字列データおよびシンボル・データは、実行中のJVMプロセスに接続しているjcmdツールで生成する必要があります。「jcmd」を参照してください。

jcmdでの文字列およびシンボルのダンピング・コマンドの例を次に示します。

jcmd pid VM.stringtable -verbose
jcmd pid VM.symboltable -verbose

構成ファイルの例を次に示します。

VERSION: 1.0
@SECTION: String
7: test123
1: *
8: segments
@SECTION: Symbol
10 -1: linkMethod

構成ファイルの例では、

- @SECTION: Stringの下の文字列エントリで使用している形式は次のとおりです。

length: string

- @SECTION: Symbolエントリで使用している形式は次のとおりです。

length refcount: symbol

共有シンボルのrefcountは常に-1です。

@SECTIONは、次に続くセクションのタイプを指定します。セクション内のデータはすべて同じタイプである必要があり、そのタイプは@SECTIONで指定します。異なるタイプのデータを混ぜることはできません。異なる@SECTIONで指定された同じタイプの複数の区切られたデータ・セクションを1つのshared_config_file内に入れることができます。

パフォーマンス・チューニングの例

javaの拡張ランタイム・オプションを使用すると、アプリケーションのパフォーマンスを最適化できます。

スループットを向上するためのチューニング

次のコマンドおよび拡張ランタイム・オプションを使用して、アプリケーションのスループット・パフォーマンスを高めることができます。

java -d64 -server -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g  -Xms26g -Xmx26g

レスポンス時間を速くするためのチューニング

次のコマンドおよび拡張ランタイム・オプションを使用して、アプリケーションの応答時間を短縮することができます。

java -d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamp

小さいJavaヒープの維持と埋込みアプリケーションの動的フットプリントの削減

次の拡張ランタイム・オプションを使用して、小さいJavaヒープを維持し、埋込みアプリケーションの動的フットプリントを削減します。

-XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5

注意:

この2つのオプションのデフォルトは、それぞれ70%と40%です。これらの小さい設定を使用した場合にパフォーマンスが犠牲になる可能性があるため、許容できないパフォーマンス低下を招かないように可能なかぎりこれらの設定を減らすことで、小さいフットプリントのために最適化する必要があります。

終了ステータス

一般にランチャから次の終了値が返されるのは、通常、ランチャが不正な引数、深刻なエラー、またはJVMによってスローされた例外によって呼び出された場合です。ただし、JavaアプリケーションはAPI呼出しSystem.exit(exitValue)を使用して任意の値を返すことができます。値は次のとおりです。

- 0: 正常終了

- >0: エラー発生

appletviewer

注意: Webブラウザを使用せずにアプレットビューアを起動したりアプレットを実行するには、appletviewerコマンドを使用します。アプレットAPIは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットのかわりに、Java Web Startまたは自己完結型アプリケーションなどの代替を検討してください。

形式

appletviewer [options] url...

options

空白で区切ったコマンド行オプションを指定します。「appletviewerのオプション」を参照してください。

url

表示されるドキュメントまたはリソースの場所を指定します。複数のURLを空白文字で区切って指定できます。

説明

appletviewerコマンドはurlで指定されたドキュメントあるいはリソースと接続して、そのドキュメントが参照するそれぞれのアプレットを別個のアプレットビューアのウィンドウで表示します。urlで参照されたドキュメントがOBJECT、EMBEDまたはAPPLETタグでどのアプレットも参照していない場合、appletviewerコマンドは何も行いません。OBJECT、EMBEDおよびAPPLETタグについては、「アプレットビューアのタグ」を参照してください。

appletviewerコマンドは、RFC2396で規定されたエスケープ・メカニズムに従って符号化されたURLを必要とします。サポートされるのは、符号化されたURLだけです。ただし、ファイル名については、RFC2396に指定された方法で符号化を解除しておく必要があります。

注意:

appletviewerコマンドは、開発専用です。

appletviewerのオプション

-encoding encoding-name

入力HTMLファイルのエンコーディング名を指定します。

-Jjavaoption

アプレットビューアを実行するJavaインタプリタに1つの引数として、文字列javaoptionを渡します。引数に空白を含めないでください。複数の引数は、すべてを接頭辞-Jで始める必要があります。これは、コンパイラの実行環境、またはメモリーの利用に有効です。JVMオプションの詳細は、javaコマンドのドキュメントを参照してください。

アプレットビューアのタグ

アプレットビューアを使用すると、ブラウザを使用せずにJavaアプレットを実行できます。

アプレットビューアでは、アプレットの起動に直接関連しないHTMLを無視します。ただし、さまざまなアプレット起動構文は認識します。この項では、アプレットビューアが認識するHTMLコードについて説明します。これ以外のHTMLコードは無視されます。

object

objectタグはHTML 4.0のタグで、HTMLページにアプレットとマルチメディア・オブジェクトを埋め込むために使用します。また、Internet Explorer (IE) 4.nのHTML 3.2用の拡張機能でもあり、最新のJavaプラグインを使用してIE上でJavaアプレットを実行できます。

<object
width="pixelWidth"
height="pixelHeight"
>
<param name="code" value="yourClass.class">
<param name="object" value="serializedObjectOrJavaBean">
<param name="codebase" value="classFileDirectory">
...alternate-text
</object>

注意:

- アプレットビューアでは、classID属性を無視します(次の値でJavaプラグインを指していることを前提とします)。

classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"

- アプレットビューアでは、通常はobjectタグの一部として含まれる、codebase属性も無視します(次のような値でネットワークcabファイル内のJavaプラグインを指していることを前提とします)。

codebase="http://java.sun.com/products/plugin/1.1/jinstall-11-win32.cab#Version=1,1,0,0"

- オプションのcodebaseパラメータ・タグは、アプレット・クラスの位置を指定する相対URLを渡します。

- codeまたはobjectを指定します(両方ではなく)。

- typeパラメータ・タグはアプレットビューアでは使用されませんが、ブラウザがプラグインを適切にロードするために必要です。アプレットの場合は、次のような値を指定します。

<param name="type" value="application/x-java-applet;version=1.1">

または

<param name="type__1" value="application/x-java-applet">

直列化オブジェクトまたはJavaBeanの場合は、typeパラメータには次のような値を指定します。

<param name="type__2" value="application/x-java-bean;version=1.1">

または

<param name="type__3" value="application/x-java-bean">

- その他のパラメータ・タグは、アプレットに渡される引数値です。

- IE4.nが認識するobjectタグとNetscape 4.nが認識するembedタグは、アプレットをダウンロードするブラウザにかかわらず、最新のJavaプラグインをアプレットが使用できるように結合することができます。

- アプレットビューアは、パラメータ・タグjava_code、java_codebase、java_object、java_typeを認識しません。これらのタグはそれぞれ、code、codebase、object、typeという名前のパラメータをアプレットが定義している場合にのみ必要です。その場合、プラグインでは、アプレットが使用するバージョンに優先してjava_ versionオプションを認識して使用します。アプレットがこれらの4つの名前のどれかを持つパラメータを要求する場合には、そのアプレットはアプレットビューアでは実行できないことがあります。

embed

embedタグはNetscapeのHTML 3.2用の拡張機能で、これを使うとHTMLページにアプレットやマルチメディア・オブジェクトを埋め込むことができます。Netscape 4.nブラウザ(HTML 3.2をサポートしている)では、Javaプラグインを使用してJavaアプレットを実行できます。

<embed
code="yourClass.class"
object="serializedObjectOrJavaBean"
codebase="classFileDirectory"
width="pixelWidth"
height="pixelHeight"
>
...
</embed>

注意:

- objectタグとembedタグは、アプレットをダウンロードするブラウザにかかわらず、最新のJavaプラグインをアプレットが使用できるように結合することができます。

- objectタグとは異なり、embedタグで指定される値はすべて、パラメータ(開始タグと終了タグの間にparamタグで指定される)ではなく、属性(タグの一部)です。

- アプレット・パラメータに引数値を渡すには、embedタグに属性をさらに追加します。

- アプレットビューアはsrc属性(通常はembedタグの一部)を無視します。

- codeまたはobjectを指定します(両方ではなく)。

- オプションのcodebase属性は、アプレット・クラスの位置を指定する相対URLを渡します。

- type属性はアプレットビューアでは使用されませんが、ブラウザがプラグインを適切にロードするために必要です。
アプレットの場合は、次のような値を指定します。

<type="application/x-java-applet;version=1.1">...

または

<type="application/x-java-applet">...

直列化オブジェクトまたはJavaBeanの場合は、typeパラメータには次のような値を指定します。

<type="application/x-java-bean;version=1.1">...

または

<type="application/x-java-bean">...

- pluginspage属性はアプレットビューアでは使用されませんが、ブラウザがプラグインを適切にロードするために必要です。次のような値で、ネットワークcabファイル内のJavaプラグインを指しています。

pluginspage="http://java.sun.com/products/plugin/1.1/jinstall-11-win32.cab#Version=1,1,0,0"

applet

appletタグは、HTMLページにアプレットを埋め込むためのHTML 3.2独自のタグです。appletタグを使ってロードされたアプレットは、ブラウザ(最新バージョンのJavaプラットフォームを使っていない場合がある)によって実行されます。アプレットを確実に最新バージョンで実行するには、objectタグを使用してJavaプラグインをブラウザにロードします。すると、そのプラグインがアプレットを実行します。

<applet
code="yourClass.class"
object="serializedObjectOrJavaBean"
codebase="classFileDirectory"
width="pixelWidth"
height="pixelHeight"
>
<param name="..." value="...">
...alternate-text
</applet>

注意:

- codeまたはobjectを指定します(両方ではなく)。

- オプションのcodebase属性は、アプレット・クラスの位置を指定する相対URLを渡します。

- paramタグは、アプレット・パラメータの引数値を渡します。

app

appタグは、appletの省略形でしたが、現在はサポートされていません。アプレットビューアはこのタグを、サポートされている等価なタグに変換して出力します。

<app
class="classFileName" (without a .class suffix)
src="classFileDirectory"
width="pixelWidth"
height="pixelHeight"
>
<param name="..." value="...">
...
</app>

jar

jarコマンドは、クラスおよびリソースのアーカイブを作成したり、個々のクラスまたはリソースをアーカイブから操作または復元する場合に使用できます。

形式

jar [OPTION...] [ [--release VERSION] [-C dir] files] ...

説明

jarコマンドは、ZIPおよびZLIBの圧縮形式に基づいた汎用のアーカイブおよび圧縮ツールです。jarコマンドは当初、Javaアプレットやアプリケーションをパッケージ化することを目的としていましたが、JDK 9以降は、モジュラJARの作成にjarコマンドを使用できます。転送やデプロイの場合は通常、モジュールをモジュラJARとしてパッケージ化した方が便利です。

jarコマンドの構文は、tarコマンドの構文と似ています。必須の操作引数のいずれかで定義された複数の主要な操作モードがあります。その他の引数は、操作の動作を変更するオプションと、操作を実行するために必要なオペランドのいずれかです。

注意:
アプレットAPIは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットのかわりに、Java Web Startまたは自己完結型アプリケーションなどの代替を検討してください。

モジュールまたはアプレットやアプリケーションのコンポーネント(ファイル、イメージおよびサウンド)が1つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続を必要とすることがありません。これによって、ダウンロードの回数が大幅に減ります。また、jarコマンドはファイルを圧縮するので、ダウンロード時間もさらに短くなります。また、jarコマンドを使用すると、ファイル内の個々のエントリに署名を書き込めるので、配布元の認証が可能になります。JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。

特定のディレクトリのルートまたは.jarアーカイブのルートにモジュール・ディスクリプタmodule-info.classを含めると、アーカイブはモジュラJARになります。次の操作(「作成および更新モードでのみ有効な操作修飾子」を参照)は、モジュラJARの作成または更新時、あるいは既存の非モジュラJARの更新時にのみ有効です。

- --module-version

- --hash-modules

- --module-path

注意:

長形式のオプションの必須引数またはオプション引数はすべて、対応する短形式のオプションに対しても必須またはオプションです。

主要な操作モード

jarコマンドを使用する際、実行する操作を指定する必要があります。jarコマンドの操作モードを指定するには、この項で説明されている適切な操作引数を含めます。操作引数と他の1文字オプションを同時に使用できます。一般に、操作引数はコマンド行に指定する最初の引数です。

—cまたは--create

アーカイブを作成します。

—i=FILEまたは--generate-index=FILE

指定されたJARファイルの索引情報を生成します。

—tまたは--list

アーカイブの目次をリストします。

—uまたは--update

既存のJARファイルを更新します。

—xまたは--extract

アーカイブから指定(または全部)のファイルを抽出します。

-dまたは--print-module-descriptor

モジュール・ディスクリプタを出力します。

任意のモードで有効な操作修飾子

次のオプションは、jarコマンドに含めた操作モードの動作をカスタマイズするのに使用できます。

-C DIR

指定されたディレクトリを変更し、コマンド行の最後に指定されたファイルを格納します。

jar [OPTION...] [ [--release VERSION] [-C dir] files]

-f=FILEまたは--file=FILE

アーカイブ・ファイル名を指定します。

--release VERSION

マルチリリースJARファイルを作成します。オプションの後に指定されたすべてのファイルをMETA-INF/versions/VERSION/ (VERSIONは値が9以上の正の整数であること)という名前のJARファイルのバージョニングされたディレクトリに格納します。

実行時、JAR内にクラスのバージョンが複数存在する場合、JDKでは初めに、VERSION番号がJDKのメジャー・バージョン番号と一致するディレクトリ・ツリーで検索し、最初に検出されたバージョンを使用します。その後、順次低いVERSION番号のディレクトリを調べ、最終的にJARのルートを調べます。

-vまたは--verbose

詳細出力を標準出力に送信または出力します。

作成および更新モードでのみ有効な操作修飾子

次のオプションは、作成および更新の主要操作モードの動作をカスタマイズするのに使用できます。

—e=CLASSNAMEまたは--main-class=CLASSNAME

モジュラJARファイルまたは実行可能なモジュラJARファイルにバンドルされたスタンドアロン・アプリケーションのアプリケーション・エントリ・ポイントを指定します。

-m=FILEまたは--manifest=FILE

指定されたマニフェスト・ファイルからマニフェスト情報を含めます。

-Mまたは--no-manifest

エントリに対してマニフェスト・ファイルを作成しません。

--module-version=VERSION

モジュラJARファイルの作成または更新時、あるいは非モジュラJARファイルの更新時にモジュール・バージョンを指定します。

--hash-modules=PATTERN

指定されたパターンで一致し、モジュラJARファイルの作成時または非モジュラJARファイルの更新時に、直接または間接的に依存しているモジュールのハッシュを計算および記録します。

-pまたは--module-path

ハッシュを生成するためのモジュール依存性の場所を指定します。

@files

テキスト・ファイルからjarオプションおよびファイル名を読み取ります。

作成、更新および索引生成モードでのみ有効な操作修飾子

次のオプションは、作成(—cまたは--create)、更新(—uまたは--update)および索引生成(—iまたは--generate-index=FILE)の主要操作モードの動作をカスタマイズするのに使用できます。

-0または--no-compress

ZIPによる圧縮を使用せずに、保存します。

その他のオプション

次のオプションは、jarコマンドで認識されますが、操作モードでは使用されません。

-hまたは--help[:compat]

jarコマンドのコマンド行ヘルプまたはオプションで互換性ヘルプを表示します。

--help-extra

追加オプションのヘルプを表示します。

--version

プログラム・バージョンを出力します。

jarコマンド構文の例

アーカイブclasses.jarを作成します。このアーカイブには、2つのクラス・ファイルFoo.classおよびBar.classが含まれます。

jar --create --file classes.jar Foo.class Bar.class

既存のマニフェストmymanifestを使用して、アーカイブclasses.jarを作成します。このアーカイブには、ディレクトリfoo/内の全ファイルが含まれます。

jar --create --file classes.jar --manifest mymanifest -C foo/

モジュラJARアーカイブfoo.jarを作成します。モジュール・ディスクリプタはclasses/module-info.classにあります。

jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/classes resources

既存の非モジュラJAR foo.jarをモジュラJARファイルに更新します。

jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/module-info.class

バージョニングされたJARまたはマルチリリースJAR foo.jarを作成し、classesディレクトリ内のファイルをJARのルートに、classes—9ディレクトリのファイルをJARのMETA-INF/versions/9ディレクトリに格納します。

この例では、classes/com/fooディレクトリに2つのクラスcom.foo.Hello (エントリ・ポイント・クラス)およびcom.foo.NameProviderがあり、いずれもJDK 8用にコンパイルされています。classes-9/com/fooディレクトリには異なるバージョンのcom.foo.NameProviderクラスがあり、これはJDK 9固有のコードが含まれており、JDK 9用にコンパイルされているクラスです。

このセットアップの場合、ディレクトリclassesおよびclasses-9が格納されているディレクトリから次のコマンドを実行して、マルチリリースJARファイルfoo.jarを作成します。

jar --create --file foo.jar --main-class com.foo.Hello -C classes . --release 9 -C classes-9 .

この時点で、JARファイルfoo.jarの内容は次のとおりです。

% jar -tf foo.jar

META-INF/
META-INF/MANIFEST.MF
com/
com/foo/
com/foo/Hello.class
com/foo/NameProvider.class
META-INF/versions/9/com/
META-INF/versions/9/com/foo/
META-INF/versions/9/com/foo/NameProvider.class

その他の情報に加えて、ファイルMETA-INF/MANIFEST.MFには、これがcom.foo.Helloのエントリ・ポイントが含まれるマルチリリースJARファイルであることを示す次の行が含まれます。

...
Main-Class: com.foo.Hello
Multi-Release: true

com.foo.Helloクラスがcom.foo.NameProviderクラスでメソッドを呼び出すとして、JDK 9を使用しているプログラムを実行すると、必ずcom.foo.NameProviderクラスはMETA-INF/versions/9/com/foo/内にあります。JDK 8を使用しているプログラムを実行すると、必ずcom.foo.NameProviderクラスはJARのルート、com/foo内にあります。

オプションおよびクラス・ファイルのリストをファイルclasses.listから読み取って、アーカイブmy.jarを作成します。

注意:

jarコマンド行を短くしたり簡潔にするために、引数を個別のテキスト・ファイルに指定し、接頭辞としてアット記号(@)を付けてjarコマンドに渡すことができます。

jar --create --file my.jar @classes.list

jlink

jlinkツールは、一連のモージュールとその依存性をカスタム・ランタイム・イメージとしてアセンブルして最適化する場合に使用できます。

形式

jlink [options] --module-path modulepath --add-modules module [,module...]

options

スペースで区切ったコマンド行オプション。「jlinkのオプション」を参照してください。

modulepath

jlinkツールで参照可能なモジュールを検出するパス。これらのモジュールは、モジュラJARファイル、JMODファイル、展開したモジュールのいずれかです。

module

ランタイム・イメージに追加するモジュールの名前。jlinkツールにより、これらのモジュールとその推移的な依存性が追加されます。

説明

jlinkツールでは、一連のモジュールをその推移的な依存性とともにリンクして、カスタム・ランタイム・イメージを作成します。

注意:

開発者は、カスタム・ランタイム・イメージの更新を担当します。

カスタム・ランタイム・イメージとは異なり、WebにデプロイされたJavaアプリケーションは、アプリケーション・アップデートが入手可能になるとすぐに、Webからそのアップデートを自動的にダウンロードします。Java自動更新メカニズムでは、毎年数回、最新のセキュアなバージョンへのJREの更新を処理します。カスタム・ランタイム・イメージには、自動更新の組込みサポートがありません。

jlinkのオプション

--add-modules mod [,mod...]

指定のモジュールmodをルート・モジュールのデフォルト・セットに追加します。ルート・モジュールのデフォルト・セットは空です。

--bind-services

サービス・プロバイダ・モジュールとその依存性をリンクします。

-c ={0|1|2}または--compress={0|1|2}

リソースの圧縮を有効にします。

- 0: 圧縮なし

- 1: 定数文字列の共有

- 2: ZIP

--disable-plugin pluginname

指定されたプラグインを無効にします。サポートされるプラグインのリストは、「jlinkのプラグイン」を参照してください。

--endian {little|big}

生成されるイメージのバイト順を指定します。デフォルト値は、システムのアーキテクチャの形式です。

-hまたは--help

ヘルプ・メッセージを出力します。

--ignore-signing-information

ランタイム・イメージ内で署名付きモジュラJARがリンクされている場合、致命的エラーを抑制します。署名付きモジュラJARの署名関連ファイルは、ランタイム・イメージにコピーされません。

--launcher command=moduleまたは--launcher command=module/main

モジュールのランチャ・コマンド名またはモジュールおよびメイン・クラスのコマンド名(モジュールとメイン・クラス名はスラッシュ(/)で区切ります)を指定します。

--limit-modules mod [,mod...]

参照可能なモジュールの領域を、指定されたモジュールmodの推移閉包内にあるモジュールと、メイン・モジュール(存在する場合)、さらに--add-modulesオプションで指定されたその他のモジュールに制限します。

--list-plugins

コマンド行オプションによってアクセスできる使用可能なプラグインをリストします(「jlinkのプラグイン」を参照)。

-pまたは--module-path modulepath

モジュール・パスを指定します。

--no-header-files

ヘッダー・ファイルを除外します。

--no-man-pages

manページを除外します。

--output path

生成されるランタイム・イメージの場所を指定します。

--save-opts filename

指定されたファイルにjlinkのオプションを保存します。

--suggest-providers [name, ...]

指定されたサービス・タイプをモジュール・パスから実装するプロバイダを推奨します。

--version

バージョン情報を出力します。

@filename

指定されたファイルからオプションを読み取ります。

オプション・ファイルとは、オプションと、通常コマンド・プロンプトに入力する値が含まれるテキスト・ファイルです。オプションは、1行で書き込まれることも、複数行で書き込まれることもあります。パス名の環境変数を指定しなくてもかまいません。行の先頭にハッシュ記号(#)を付けると、その行をコメント・アウトできます。

jlinkコマンドのオプション・ファイルの例を次に示します。

#Wed Dec 07 00:40:19 EST 2016
--module-path C:/Java/jdk9/jmods;mlib
--add-modules com.greetings
--output greetingsapp

jlinkのプラグイン

注意:

この項に記載されていないプラグインは、サポートされておらず、変更される可能性があります。

pattern-listを必要とするプラグイン・オプションの場合、値は要素のカンマ区切りのリストで、各要素では次の形式のいずれかを使用します。

- glob-pattern

- glob:glob-pattern

- regex:regex-pattern

- @filename

- filenameは、使用されるパターン(行ごとに1パターン)が含まれるファイルの名前です。

すべての使用可能なプラグインの詳細リストを表示するには、コマンドjlink --list-pluginsを実行します。

表2-3 使用可能なjlinkのプラグインのリスト

プラグイン名

オプション

説明

class-for-name

--class-for-name

クラスの最適化、Class.forNameコールを一定の負荷に変換します。

compress

--compress={0|1|2}[:filter=pattern-list]

出力イメージのすべてのリソースを圧縮します。

- レベル0: 圧縮なし

- レベル1: 定数文字列の共有

- レベル2: ZIP

含めるファイルのパターンをリストする場合、オプションのpattern-listフィルタを指定できます。

dedup-legal-notices

--dedup-legal-notices=[error-if-not-same-content]

すべての法律上の注意点において重複を排除します。error-if-not-same-contentが指定されている場合、同じファイル名の2つのファイルが異なっていると、エラーとなります。

exclude-files

--exclude-files=pattern-list

除外するファイルを指定します。次に例を示します。

--exclude-files=**.java,glob:/java.base/lib/client/**

exclude-jmod-section

--exclude-jmod-section=section-name

section-nameがmanまたはheadersである場合に除外するJMODセクションを指定します。

exclude-resources

--exclude-resources=pattern-list

除外するリソースを指定します。次に例を示します。

--exclude-resources=**.jcov,glob:**/META-INF/**

generate-jli-classes

--generate-jli-classes=@filename[:ignore-version=<true|false>]

事前に生成するjava.lang.invokeクラスをリストしたファイルを指定します。デフォルトでは、このプラグインでは事前に生成するクラスの組込みリストを使用できます。作成されているイメージとは別のランタイム・バージョンでこのプラグインが実行される場合は、妥当性を保証するためにコード生成がデフォルトで無効になっています。この動作をオーバーライドする場合は、ignore-version=trueを追加します。

include-locales

--include-locales=langtag[,langtag]*

langtagがBCP 47言語タグであるロケールのリストを組み込みます。このオプションは、RFC 4647で定義されているロケール・マッチングをサポートしています。このオプションを使用する場合は、必ずモジュールjdk.localedataを追加します。

例:

--add-modules jdk.localedata --include-locales=en,ja,*-IN

order-resources

--order-resources=pattern-list

指定されたパスを優先順位で並べます。@filenameが指定されている場合、pattern-listの各行は順序付けられるパスと完全に一致する必要があります。

例:

--order-resources=**/module-info.class,@classlist,/java.base/java/lang/**

release-info

--release-info={file|add:key1=value1:key2=value2:...|del:key-list}

次のように、リリース・プロパティをロード、追加または削除します。

- file: リリース・プロパティを指定されたファイルからロードします。

- add: 指定されたプロパティをリリース・ファイルに追加します。必要な分のkey=valueペアの数を指定できます。

- del: リリース・ファイルkey-listのキーのリストを削除します。

strip-debug

--strip-debug

出力イメージからデバッグ情報を削除します

strip-native-commands

--strip-native-commands

ネイティブ・コマンド(java/java.exeなど)をイメージから除外します。

system-modules

--system-modules=retainModuleTarget

モジュール・ディスクリプタを高速ロードします(常に有効)

vm

--vm={client|server|minimal|all}

出力イメージのHotSpot VMを選択します。デフォルトは、allです。

jlinkの例

次のコマンドは、ディレクトリgreetingsappでランタイム・イメージを作成します。このコマンドは、モジュールcom.greetingsをリンクします(このモジュールの定義は、ディレクトリmlibに格納されています)。ディレクトリ$JAVA_HOME/jmodsには、java.base.jmodとその他の標準モジュールおよびJDKモジュールが格納されています。

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp

次のコマンドは、ランタイム・イメージgreetingsapp内のモジュールをリストします。

greetingsapp/bin/java --list-modules
com.greetings
java.base@9
java.logging@9
org.astro@1.0

次のコマンドは、ディレクトリcompressedrtでデバッグ記号が削除されたランタイム・イメージを作成し、圧縮を使用して領域を削減し、フランス語の言語ロケール情報を含めます。

jlink --module-path $JAVA_HOME/jmods --add-modules jdk.localedata --strip-debug --compress=2 --include-locales=fr --output compressedrt

次の例では、ランタイム・イメージcompressedrt (デバッグ記号が削除されておらず、圧縮を使用していない)のサイズをfr_rtと比較します。

jlink --module-path $JAVA_HOME/jmods --add-modules jdk.localedata --include-locales=fr --output fr_rt

du -sh ./compressedrt ./fr_rt
23M     ./compressedrt
36M     ./fr_rt

次の例では、java.security.Providerを実装するプロバイダをリストします。

jlink --module-path $JAVA-HOME/jmods --suggest-providers java.security.Provider

Suggested providers:
java.naming provides java.security.Provider used by java.base
java.security.jgss provides java.security.Provider used by java.base
java.security.sasl provides java.security.Provider used by java.base
java.smartcardio provides java.security.Provider used by java.base
java.xml.crypto provides java.security.Provider used by java.base
jdk.crypto.cryptoki provides java.security.Provider used by java.base
jdk.crypto.ec provides java.security.Provider used by java.base
jdk.crypto.mscapi provides java.security.Provider used by java.base
jdk.deploy provides java.security.Provider used by java.base
jdk.security.jgss provides java.security.Provider used by java.base

次の例では、java.namingおよびjdk.crypto.cryptokiとその依存性のみが含まれ、他のプロバイダは含まれないmybuildという名前のカスタム・ランタイム・イメージを作成します。これらの依存性は、モジュール・パスに存在する必要があります。

jlink --module-path $JAVA_HOME/jmods --add-modules java.naming,jdk.crypto.cryptoki --output mybuild

次のコマンドは、greetingsappという名前のランタイム・イメージを作成するコマンドと似ていますが、ルート・モジュールから解決されるモジュールとサービス・バインディングをリンクする点が異なります。Configuration.resolveAndBindメソッドを参照してください。

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp --bind-services

次のコマンドは、このコマンドで作成されたランタイム・イメージgreetingsapp内のモジュールをリストします。

greetingsapp/bin/java --list-modules
com.greetings
java.base@9
java.compiler@9
java.datatransfer@9
java.desktop@9
java.logging@9
java.management@9
java.management.rmi@9
java.naming@9
java.prefs@9
java.rmi@9
java.scripting@9
java.security.jgss@9
java.security.sasl@9
java.smartcardio@9
java.xml@9
java.xml.crypto@9
jdk.accessibility@9
jdk.charsets@9
jdk.compiler@9
jdk.crypto.cryptoki@9
jdk.crypto.ec@9
jdk.crypto.mscapi@9
jdk.deploy@9
jdk.dynalink@9
jdk.internal.opt@9
jdk.jartool@9
jdk.javadoc@9
jdk.jdeps@9
jdk.jlink@9
jdk.localedata@9
jdk.management@9
jdk.naming.dns@9
jdk.naming.rmi@9
jdk.scripting.nashorn@9
jdk.security.auth@9
jdk.security.jgss@9
jdk.unsupported@9
jdk.zipfs@9
org.astro@1.0

jmod

jmodツールは、JMODファイルを作成したり、既存のJMODファイルの内容をリストする場合に使用します。

形式

jmod (create|extract|list|describe|hash) [options] jmod-file

次の情報が含まれます。

主要な操作モード

create

新しいJMODアーカイブ・ファイルを作成します。

extract

JMODアーカイブ・ファイルからすべてのファイルを抽出します。

list

すべてのエントリの名前を出力します。

describe

モジュールの詳細を出力します。

hash

リーフ・モジュールを特定し、直接または間接的にそれらを必要とする依存性のハッシュを記録します。

オプション

options

「jmodのオプション」を参照してください。

必須

jmod-file

作成するまたは情報の取得元となるJMODファイルの名前を指定します。

説明

注意:
モジュールをモジュール・パスにデプロイしたり、Mavenリポジトリに公開するなど、ほとんどの開発タスクの場合、引き続きモジュールをモジュラJARファイルにパッケージ化します。jmodツールは、ネイティブ・ライブラリまたは他の構成ファイルを持つモジュールまたはjlinkツールを使用してランタイム・イメージにリンクするモジュールを対象としています。

JMODファイル形式を使用すると、.classファイル以外のファイル、メタデータおよびリソースを集約できます。この形式は転送可能ですが、実行可能ではありません。つまり、コンパイル時やリンク時に使用することはできますが、実行時には使用できません。

jmodオプションの多くは、内容が結果のJMODファイルにコピーされるパスの指定を含みます。このようなオプションでは、サブディレクトリとその内容を含め、指定されたパスの内容をすべてコピーしますが、名前が--excludeオプションで指定されたパターンと一致するファイルは除外します。

--hash-modulesオプションまたはjmod hashコマンドを使用すると、各モジュールのディスクリプタに、そのモジュールに依存できるモジュールの内容のハッシュを記録でき、このようにしてこれらのモジュールを"結び付ける"ことができます。これにより、パッケージを1つ以上の特定の名前が付けられたモジュールにエクスポートしたり、修飾されたエクスポートによってそれ以外にはエクスポートしないようにできます。ランタイムでは、記録されたモジュールのハッシュが実行時に解決されたものと一致するかどうかを検証し、一致しない場合はエラーを返します。

jmodのオプション

--class-path path

アプリケーションJARファイルまたは結果のJMODファイルにコピーするクラスが格納されているディレクトリの場所を指定します。

--cmds path

結果のJMODファイルにコピーするネイティブ・コマンドの場所を指定します。

--config path

結果のJMODファイルにコピーするユーザーが編集可能な構成ファイルの場所を指定します。

–-dir path

jmodで指定のJMODアーカイブから抽出されたファイルを置く場所を指定します。

--dry-run

ハッシュ・モードの試験的な実行を実行します。ハッシュ値を記録せずに、リーフ・モジュールとそれに必要なモジュールを特定します。

--exclude pattern–list

指定されたカンマ区切りのパターン・リスト(各要素は次のいずれかの形式)と一致するファイルを除外します。

- glob-pattern

- glob:glob-pattern

- regex:regex-pattern

glob-patternの構文は、FileSystem.getPathMatcherメソッドを参照してください。正規表現を表すregex-patternの構文は、Patternクラスを参照してください。

--hash-modules regex-pattern

指定されたregex-patternと一致するモジュールのモジュール・グラフに基づいて、リーフ・モジュールを特定し、直接または間接的にそれらを必要とする依存性のハッシュを記録します。ハッシュは、作成されるJMODアーカイブ・ファイルに、あるいはjmod hashコマンドで指定されたモジュール・パス上のJMODアーカイブまたはモジュラJARに記録されます。

--header-files path

結果のJMODファイルにコピーするヘッダー・ファイルの場所を指定します。

--helpまたは-h

使用方法が表示されます。

--help-extra

追加オプションのヘルプを出力します。

–-legal-notices path

結果のJMODファイルにコピーする法律上の注意点の場所を指定します。

--libs path

結果のJMODファイルにコピーするネイティブ・ライブラリの場所を指定します。

--main-class class-name

module-info.classファイルに記録するメイン・クラスを指定します。

--man-pages path

結果のJMODファイルにコピーするmanページの場所を指定します。

--module-version module-version

module-info.classファイルに記録するモジュール・バージョンを指定します。

--module-path pathまたは-p path

モジュール・パスを指定します。このオプションは、--hash-modulesも指定する場合に必要です。

--target-platform platform

ターゲット・プラットフォームを指定します。

--version

jmodツールのバージョン情報を出力します。

@filename

指定されたファイルからオプションを読み取ります。

オプション・ファイルとは、オプションと、通常コマンド・プロンプトに入力する値が含まれるテキスト・ファイルです。オプションは、1行で書き込まれることも、複数行で書き込まれることもあります。パス名の環境変数を指定しなくてもかまいません。行の先頭にハッシュ記号(#)を付けると、その行をコメント・アウトできます。

jmodコマンドのオプション・ファイルの例を次に示します。

#Wed Dec 07 00:40:19 EST 2016
create --class-path mods/com.greetings --module-path mlib
--cmds commands --config configfiles --header-files src/h
--libs lib --main-class com.greetings.Main
--man-pages man --module-version 1.0
--os-arch "x86_x64" --os-name "Mac OS X"
--os-version "10.10.5" greetingsmod

jmodの追加オプション

「jmodのオプション」で説明されているオプションに加えて、次の追加オプションがコマンドとともに使用できます。

--do-not-resolve-by-default

モジュールのデフォルトのルート・セットから除外します。

--warn-if-resolved

モジュールが解決される場合に警告を発行するツールのヒント。非推奨、削除予定の非推奨または実験的のいずれかです。

jmod createの例

JMODファイルの作成の例を次に示します。

jmod create --class-path mods/com.greetings --cmds commands
--config configfiles --header-files src/h --libs lib
--main-class com.greetings.Main --man-pages man --module-version 1.0
--os-arch "x86_x64" --os-name "Mac OS X"
--os-version "10.10.5" greetingsmod

jmod hashの例

次の例では、リーフ・モジュール(この例では、ma)を必要なモジュール(mb)とリンクしようとし、必要なモジュールに記録されたハッシュ値がリーフ・モジュールのハッシュ値と一致しないときの動作を示します。

1. 次の.javaファイルを作成してコンパイルします。

- jmodhashex/src/ma/module-info.java

module ma {
requires mb;
}

- jmodhashex/src/mb/module-info.java

module mb {
}

- jmodhashex2/src/ma/module-info.java

module ma {
requires mb;
}

- jmodhashex2/src/mb/module-info.java

module mb {
}

2. モジュールごとにJMODアーカイブを1つ作成します。ディレクトリjmodhashex/jmodsおよびjmodhashex2/jmodsを作成した後、次のコマンドをjmodhashexディレクトリから、次にjmodhashex2ディレクトリから実行します。

- jmod create --class-path mods/ma jmods/ma.jmod

- jmod create --class-path mods/mb jmods/mb.jmod

3. 必要に応じて、jmod hashコマンドをプレビューします。次のコマンドをjmodhashexディレクトリから実行します。
jmod hash --dry-run -module-path jmods --hash-modules .*

このコマンドにより、次のように出力されます。

Dry run:
mb
hashes ma SHA-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a

これは、jmod hashコマンド(--dry-runオプションの指定なし)がリーフ・モジュールmaのハッシュ値をモジュールmbに記録することを示しています。

4. jmodhashexディレクトリに格納されているJMODアーカイブ・ファイルにハッシュ値を記録します。次のコマンドをjmodhashexディレクトリから実行します。
jmod hash --module-path jmods --hash-modules .*

このコマンドにより、次のように出力されます。

Hashes are recorded in module mb

5. jmodhashexディレクトリに格納されている各JMODアーカイブに関する情報を出力します。jmodhashexディレクトリから強調表示されているコマンドを実行します。

jmod describe jmods/ma.jmod

ma
requires mandated java.base
requires mb

jmod describe jmods/mb.jmod

mb
requires mandated java.base
hashes ma SHA-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a

6. ディレクトリjmodhashexのモジュールmbを除いて、ディレクトリjmodhashex2のモジュールmaが含まれるランタイム・イメージの作成を試みます。jmodhashex2ディレクトリから次のコマンドを実行します。

- Oracle Solaris、LinuxおよびOS X: jlink --module-path $JAVA_HOME/jmods:jmods/ma.jmod:../jmodhashex/jmods/mb.jmod --add-modules ma --output ma-app

- Windows: jlink --module-path %JAVA_HOME%/jmods;jmods/ma.jmod;../jmodhashex/jmods/mb.jmod --add-modules ma --output ma-app

次のようなエラー・メッセージが出力されます。

Error: Hash of ma (a2d77889b0cb067df02a3abc39b01ac1151966157a68dc4241562c60499150d2) differs to
expected hash (07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a) recorded in mb

jdeps

jdepsコマンドは、Javaクラスの依存関係アナライザを起動する場合に使用します。

形式

jdeps [options] path ...

options

コマンド行オプション。使用可能なオプションの詳細は、次の各項を参照してください。

- 有効なオプション

- モジュール依存関係分析オプション

- 依存関係をフィルタするオプション

- 分析対象のクラスをフィルタするオプション

path

分析する.classファイル、ディレクトリまたはJARファイルのパス名。

説明

jdepsコマンドは、Javaクラス・ファイルの依存関係をパッケージ・レベルまたはクラス・レベルで表示します。入力クラスには、.classファイル、ディレクトリ、JARファイルへのパス名、またはすべてのクラス・ファイルが分析されるクラスの完全修飾名を指定できます。出力は、オプションによって決まります。デフォルトでは、jdepsコマンドはシステム出力に依存関係を書き込みます。このコマンドは、依存関係をDOT言語で生成できます(-dotoutputオプションを参照)。

有効なオプション

-dotoutput dirまたは--dot-output dir

DOTファイルの出力先ディレクトリを指定します。このオプションを指定した場合、jdeps コマンドは、分析対象のアーカイブごとに、依存関係をリストするarchive-file-name.dotという名前の.dotファイルを1つを生成し、アーカイブ間の依存関係をリストするsummary.dotという名前のサマリー・ファイルも生成します。

-sまたは-summary

依存関係のサマリーのみを出力します。

-vまたは-verbose

クラス・レベルの依存関係をすべて出力します。これは次の記述と同等です。

-verbose:class -filter:none

-verbose:package

デフォルトでは同じアーカイブ内の依存関係を除く、パッケージ・レベルの依存関係を出力します。

-verbose:class

デフォルトでは同じアーカイブ内の依存関係を除く、クラス・レベルの依存関係を出力します。

-apionlyまたは--api-only

分析をAPI、たとえば、パブリック・クラスのpublicおよびprotectedメンバーの署名からの依存関係(フィールドの型、メソッド・パラメータの型、戻り値の型、チェック例外の型を含む)に制限します。

-jdkinternalsまたは--jdk-internals

JDKの内部APIでクラス・レベルの依存関係を検索します。デフォルトでは、-includeオプションを指定しないかぎり、このオプションは-classpathオプションおよび入力ファイルに指定されたすべてのクラスを分析します。このオプションと-p、-eおよび-sオプションを一緒に使用することはできません。

警告: JDKの内部APIにはアクセスできません。

-cp path、-classpath pathまたは--classpath path

クラス・ファイルの検索場所を指定します。

--module-path module-path

モジュール・パスを指定します。

--upgrade-module-path module-path

アップグレード・モジュール・パスを指定します。

--system java-home

代替システム・モジュール・パスを指定します。

--add-modules module-name [, module-name...]

分析のルート・セットにモジュールを追加します。

--multi-release version

マルチリリースJARファイルを処理するときのバージョンを指定します。versionは9以上の整数またはbaseにする必要があります。

—qまたは-quite

–generate-module-info出力から欠落している依存関係を表示しません。

-versionまたは--version

バージョン情報を出力します。

モジュール依存関係分析オプション

–m module-nameまたは--module module-name

分析対象のルート・モジュールを指定します。

--generate-module-info dir

指定されたディレクトリでmodule-info.javaを生成します。指定されたJARファイルが分析されます。このオプションは、--dot-outputまたは--class-pathオプションと一緒に使用できません。オープン・モジュールには、--generate-open-moduleオプションを使用します。

--generate-open-module dir

指定されたディレクトリで指定のJARファイルのmodule-info.javaをオープン・モジュールとして生成します。このオプションは、--dot-outputまたは--class-pathオプションと一緒に使用できません。

--check module-name [, module-name...]

指定されたモジュールの依存関係を分析します。モジュール・ディスクリプタ、分析結果のモジュールの依存関係および遷移削減後のグラフを出力します。また、未使用の修飾されたエクスポートも特定します。

--list-deps

モジュールの依存関係の他、JDKの内部API (参照される場合)のパッケージ名もリストします。

--list—reduced-deps

--list-depsと同じですが、モジュール・グラフからの含意された読取りエッジをリストしません。モジュールM1がM2を読み取り、M2はM3上で推移的である必要がある場合、M3を読み取るM1は含意されており、グラフには表示されません。

依存関係をフィルタするオプション

-p pkg name、-package pkg nameまたは--package pkg name

指定されたパッケージ名に一致する依存関係を検索します。このオプションは、様々なパッケージに対して複数回指定できます。-pオプションと-eオプションは、相互に排他的です。

-e regex、-regex regexまたは--regex regex

指定されたパターンに一致する依存関係を検索します。-pオプションと-eオプションは、相互に排他的です。

--require module-name

指定されたモジュール名(複数回指定されることもあり)に一致する依存関係を検索します。--package、--regexおよび--requireオプションは相互に排他的です。

-f regexまたは-filterregex

指定されたパターンに一致する依存関係をフィルタします。複数回指定した場合は、最後のものが選択されます。

-filter:package

同じパッケージ内の依存関係をフィルタします。これはデフォルトです。

-filter:archive

同じアーカイブ内の依存関係をフィルタします。

-filter:module

同じモジュール内の依存関係をフィルタします。

-filter:none

-filter:packageおよび-filter:archiveのフィルタリングは行われません。-filterオプションで指定されたフィルタリングが引き続き適用されます。

分析対象のクラスをフィルタするオプション

-include regex

パターンに一致するクラスに分析を制限します。このオプションを使用すると、分析対象クラスのリストがフィルタリングされます。パターンを依存関係に適用する-pおよび-eとともに使用できます。

-Pまたは-profile

パッケージを含むプロファイルを表示します。

-Rまたは-recursive

すべてのランタイム依存関係を再帰的にトラバースします。-Rオプションは-filter:noneを意味します。-p、-eまたは-fオプションを指定した場合、一致する依存関係のみが分析されます。

-Iまたは-inverse

他の指定されたオプションごとに依存関係を分析し、一致するノードに直接および間接的に依存するアーティファクトをすべて検索します。これは、コンパイル時の表示分析および出力依存関係サマリーの逆に相当します。このオプションは、--require、--packageまたは--regexオプションと一緒に使用する必要があります。

--compile-time

-Rオプションのコンパイル時の表示など、推移的な依存関係のコンパイル時の表示を分析します。他の指定されたオプションごとに依存関係を分析します。ディレクトリ、JARファイルまたはモジュールから依存関係が検出された場合、その含んでいるアーカイブ内のクラスがすべて分析されます。

依存関係の分析例

次の例では、Notepad.jarファイルの依存関係の分析を示します。

Oracle Solaris、LinuxおよびOS X:

$ jdeps demo/jfc/Notepad/Notepad.jar
Notepad.jar -> java.base
Notepad.jar -> java.desktop
Notepad.jar -> java.logging
<unnamed> (Notepad.jar)
-> java.awt
-> java.awt.event
-> java.beans
-> java.io
-> java.lang
-> java.net
-> java.util
-> java.util.logging
-> javax.swing
-> javax.swing.border
-> javax.swing.event
-> javax.swing.text
-> javax.swing.tree
-> javax.swing.undo

Windows:

C:\Java\jdk1.9.0>jdeps demo\jfc\Notepad\Notepad.jar
Notepad.jar -> java.base
Notepad.jar -> java.desktop
Notepad.jar -> java.logging
<unnamed> (Notepad.jar)
-> java.awt
-> java.awt.event
-> java.beans
-> java.io
-> java.lang
-> java.net
-> java.util
-> java.util.logging
-> javax.swing
-> javax.swing.border
-> javax.swing.event
-> javax.swing.text
-> javax.swing.tree
-> javax.swing.undo

--inverseオプションの使用例

$ jdeps --inverse --require java.xml.bind
Inverse transitive dependences on [java.xml.bind]
java.xml.bind <- java.se.ee
java.xml.bind <- jdk.xml.ws
java.xml.bind <- java.xml.ws <- java.se.ee
java.xml.bind <- java.xml.ws <- jdk.xml.ws
java.xml.bind <- jdk.xml.bind <- jdk.xml.ws

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

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

リリース値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

3 言語シェル

言語シェルは、Java言語の習得、新しい機能およびAPIの試用、新しいコードの試作を行うのに使用します。

次のトピックでは、Java言語シェルについて説明します。

- jshell: Javaプログラミング言語の宣言、文および式をread-eval-printループ(REPL)で対話しながら評価します。

jshell

jshellツールは、Javaプログラミング言語の宣言、文および式をread-eval-printループ(REPL)で対話しながら評価する場合に使用します。

形式

jshell [options] [load-files]

options

コマンド行オプションをスペースで区切ったものです。「jshellのオプション」を参照してください。

load-files

ツールの起動時に実行する1つ以上のスクリプトです。スクリプトには、有効なコード・スニペットまたはJShellコマンドを含めることができます。

スクリプトはローカル・ファイルまたは次の事前定義済スクリプトのいずれかにできます。

DEFAULT

デフォルトのエントリをロードします(一般にインポートとして使用されます)。

JAVASE

すべてのJava SEパッケージをインポートします。

PRINTING

print、printlnおよびprintfを、ツール内で使用するためのjshellメソッドとして定義します。

複数のスクリプトの場合、空白を使用して名前を区切ります。スクリプトは、コマンド行で入力された順に実行されます。コマンド行スクリプトは、起動スクリプトの後に実行されます。JShellの起動後にスクリプトを実行するには、/openコマンドを使用します。

説明

JShellは、Javaプログラミング言語の宣言、文および式を対話しながら評価する手段となり、言語の習得、よく知らないコードおよびAPIの試用、複雑なコードの試作がしやすくなります。Javaの文、変数定義、メソッド定義、クラス定義、インポート文および式が使用可能です。入力されたコードの断片をスニペットと呼びます。

入力されたスニペットは、評価されてフィードバックが提示されます。フィードバックは、入力されたスニペットと選択されたフィードバック・モードに応じて、処理の結果および説明の記載ありから一切記載なしまで様々です。エラーは、フィードバック・モードに関係なく記載されます。ツールの学習時には、冗長モードで起動して最大量のフィードバックを取得します。

コマンド行オプションは、JShellの起動時に初期環境を構成するために使用できます。JShell内で、コマンドは必要に応じて環境を変更するために使用できます。

既存のスニペットは、JShellセッションを初期化するために、あるいはセッション内であればいつでもファイルからロードできます。スニペットは、セッション内に変更して様々なバリエーションを試し、修正することができます。後で使用するためにスニペットを保存するには、ファイルに保存します。

jshellのオプション

--add-modules module[,module...]

初期モジュールに加えて解決するルート・モジュールを指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

-Cflag

コンパイラに渡すフラグを指定します。複数のフラグを渡すには、必要なフラグまたはフラグ引数ごとにこのオプションのインスタンスを指定します。

--class-path path

クラス・ファイルを見つけるために検索されるディレクトリおよびアーカイブを指定します。このオプションはCLASSPATH環境変数のパスをオーバーライドします。環境変数を設定しておらず、このオプションを使用しない場合は、現在のディレクトリが検索されます。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

--feedback mode

入力内容に応じて提供されるフィードバックの初期レベルを設定します。初期レベルは、/set feedback modeコマンドを使用して、セッション内でオーバーライドできます。デフォルトはnormalです。

modeには、次の値が有効です。

verbose

エントリについて詳細なフィードバックを示します。実行された処理に関する追加情報は、処理結果の後に表示されます。次のプロンプトは、フィードバックとは空行で区切られます。

normal

平均的な量のフィードバックを示します。次のプロンプトは、フィードバックとは空行で区切られます。

concise

最小量のフィードバックを示します。次のプロンプトは、コード・スニペットまたはフィードバックのすぐ後から続きます。

silent

フィードバックを示しません。次のプロンプトは、コード・スニペットのすぐ後から続きます。

custom

モードの定義方法に基づいたカスタム・フィードバックを示します。カスタム・フィードバック・モードは、/set modeコマンドを使用して、JShell内で作成されます。

--help
標準オプションのサマリーを出力し、ツールを終了します。

--help-extraまたは-X
非標準オプションのサマリーを出力し、ツールを終了します。非標準のオプションは予告なく変更される可能性があります。

-Jflag
ランタイム・システムに渡すフラグを指定します。複数のフラグを渡すには、必要なフラグまたはフラグ引数ごとにこのオプションのインスタンスを指定します。

--module-path modulepath アプリケーション・モジュールの参照先を指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。 --no-startup
JShellの起動時に、起動スクリプトが実行されないようにします。このオプションは、JShellの起動時にコマンド行に入力されたスクリプトのみを実行する場合、またはスクリプトが入力されなかったときに事前にロードされた情報なしにJShellを起動する場合に使用します。このオプションは、--startupオプションが使用されている場合には使用できません。

-q
フィードバック・モードをconciseに設定します(--feedback conciseと入力するのと同じです)。

-Rflag
リモート・ランタイム・システムに渡すフラグを指定します。複数のフラグを渡すには、渡すフラグまたはフラグ引数ごとにこのオプションのインスタンスを指定します。

-s
フィードバック・モードをsilentに設定します(--feedback silentと入力するのと同じです)。

--show-version
バージョン情報を出力し、ツールを入力します。

--startup file
このセッションのデフォルトの起動スクリプトをオーバーライドします。スクリプトには、有効なコード・スニペットまたはコマンドを含めることができます。

スクリプトはローカル・ファイルまたは次の事前定義済スクリプトのいずれかにできます。

DEFAULT

デフォルトのエントリをロードします(一般にインポートとして使用されます)。

JAVASE

すべてのJava SEパッケージをインポートします。

PRINTING

print、printlnおよびprintfを、ツール内で使用するためのjshellメソッドとして定義します。

複数のスクリプトの場合、スクリプトごとにこのオプションの別個のインスタンスを指定します。起動スクリプトは、JShellの初回起動時と、/reset、/reloadまたは/envコマンドによるセッションの再開時に実行されます。起動スクリプトは、コマンド行で入力された順に実行されます。

このオプションは、--no-startupオプションが使用されている場合には使用できません。

-v
フィードバック・モードをverboseに設定します(--feedback verboseと入力するのと同じです)。

--version
バージョン情報を出力し、ツールを終了します。

jshellのコマンド

jshellツール内で、コマンドは環境の変更やコード・スニペットの管理に使用されます。

/drop [name[ name...]|id[ id...]]

スニペットを削除し、非アクティブにします。インポート、クラス、メソッドまたは変数の名前またはIDのいずれかを指定します。複数のスニペットの場合、空白で名前およびIDを区切ります。/listコマンドを使用してコード・スニペットのIDを参照します。

/edit [option]

エディタを開きます。オプションが入力されていない場合、エディタはアクティブなスニペットを使用して開きます。

有効なオプションは次のとおりです。

name[ name...]|id[ id...]

nameまたはidで指定されたスニペットを使用してエディタを開きます。複数のスニペットの場合、空白で名前およびIDを区切ります。

-all

起動スニペット、失敗したスニペット、上書きされたスニペット、削除されたスニペットを含め、すべてのスニペットを使用してエディタを開きます。

-start

JShellの起動時に評価された起動スニペットを使用してエディタを開きます。

編集モードを終了するには、エディタ・ウィンドウを閉じるか、エディタの設定時に-waitオプションを使用した場合は、示されたプロンプトに応答します。

/set editorコマンドを使用して、使用するエディタを指定します。エディタが設定されていない場合、環境変数JSHELLEDITOR、VISUAL、EDITORがこの順でチェックされます。エディタがJShellで設定されておらず、エディタ環境変数がいずれも設定されていない場合、デフォルトの簡易エディタが使用されます。

/env [options]
環境設定を表示するか、環境設定を更新してセッションを再開します。オプションを入力しなかった場合、現在の環境設定が表示されます。1つ以上のオプションを入力した場合、セッションは次のように再開されます。

- 指定されたオプションで環境設定を更新します。

- 実行の状態をリセットします。

- 起動スクリプトを実行します。

- 入力された順序で履歴のサイレント・モードでリプレイします。履歴には、jshellプロンプトで、コマンド行で入力したスクリプトに、または/openコマンドを使用して入力したスクリプトに入力した有効なスニペットまたは/dropコマンドがすべて含まれます。

コマンド行で入力した環境設定、または以前の/reset、/envまたは/reloadコマンドを使用して指定した環境設定は、設定を上書きするoptionが入力されないかぎり維持されます。

有効なオプションは次のとおりです。

--add-modules module[,module...]

初期モジュールに加えて解決するルート・モジュールを指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

--add-exports source-module/package=target-module[,target-module]*

source-moduleからtarget-moduleへのpackageのエクスポートを追加します。

--class-path path

クラス・ファイルを見つけるために検索されるディレクトリおよびアーカイブを指定します。このオプションはCLASSPATH環境変数のパスをオーバーライドします。環境変数を設定しておらず、このオプションを使用しない場合は、現在のディレクトリが検索されます。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

--module-path modulepath

アプリケーション・モジュールの参照先を指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

/exit
ツールを終了します。

/history
このセッションで入力された内容を表示します。

/help [command|subject]
コマンドおよびサブジェクトに関する情報を表示します。オプションを入力しなかった場合、すべてのコマンドに関するサマリー情報と使用可能なサブジェクトのリストが表示されます。有効なコマンドを指定すると、そのコマンドの補足情報が表示されます。有効なサブジェクトを入力すると、そのサブジェクトに関する情報が表示されます。

subjectには、次の値が有効です。

context

環境の構成に使用可能なオプションの説明を表示します。

intro

ツールの概要を示します。

shortcuts

コマンドおよびスニペットを補完するためのキーストロークの説明を表示します。

/imports
起動スクリプトおよびJShellの起動時にコマンド行に入力されたスクリプトからのものを含め、現在のアクティブなインポートを表示します。

/list [option]
スニペットとそのIDのリストを表示します。オプションを入力しなかった場合、すべてのアクティブなスニペットが表示されますが、起動スニペットは表示されません。

有効なオプションは次のとおりです。

name[ name...]|id[ id...]

nameまたはidで指定されたスニペットを表示します。複数のスニペットの場合、空白で名前およびIDを区切ります。

-all

起動スニペット、失敗したスニペット、上書きされたスニペット、削除されたスニペットを含め、すべてのスニペットを表示します。sで始まるIDは、起動スニペットを指します。eで始まるIDは、失敗したスニペットを指します。

-start

JShellの起動時に評価された起動スニペットを表示します。

/methods [option]
入力されたメソッドに関する情報を表示します。オプションを入力しなかった場合、すべてのアクティブなメソッドの名前、パラメータの型および戻り値の型が表示されます。

有効なオプションは次のとおりです。

name[ name...]|id[ id...]

nameまたはidで指定されたメソッドに関する情報を表示します。複数のメソッドの場合、空白で名前およびIDを区切ります。/listコマンドを使用してコード・スニペットのIDを参照します。

-all

JShellの起動時に追加されたメソッド、失敗したメソッド、上書きされたメソッド、削除されたメソッドを含め、すべてのメソッドに関する情報を表示します。

-start

JShellの起動時に追加された起動メソッドに関する情報を表示します。

/open file
指定されたスクリプトを開き、スニペットをツールに読み込みます。スクリプトはローカル・ファイルまたは次の事前定義済スクリプトのいずれかにできます。

DEFAULT

デフォルトのエントリをロードします(一般にインポートとして使用されます)。

JAVASE

すべてのJava SEパッケージをインポートします。

PRINTING

print、printlnおよびprintfを、ツール内で使用するためのjshellメソッドとして定義します。

/reload [options]
セッションを次のように再開します。

- 指定されたオプションがある場合は、そのオプションで環境設定を更新します。

- 実行の状態をリセットします。

- 起動スクリプトを実行します。

- 入力された順に履歴をリプレイします。履歴には、jshellプロンプトで、コマンド行で入力したスクリプトに、または/openコマンドを使用して入力したスクリプトに入力した有効なスニペットまたは/dropコマンドがすべて含まれます。

コマンド行で入力した環境設定、または以前の/reset、/envまたは/reloadコマンドを使用して指定した環境設定は、設定を上書きするoptionが入力されないかぎり維持されます。

有効なオプションは次のとおりです。

--add-modules module[,module...]

初期モジュールに加えて解決するルート・モジュールを指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

--add-exports module/package=target-module[,target-module]*

source-moduleからtarget-moduleへのpackageのエクスポートを追加します。

--class-path path

クラス・ファイルを見つけるために検索されるディレクトリおよびアーカイブを指定します。このオプションはCLASSPATH環境変数のパスをオーバーライドします。環境変数を設定しておらず、このオプションを使用しない場合は、現在のディレクトリが検索されます。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

--module-path modulepath

アプリケーション・モジュールの参照先を指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

-quiet

表示せずに、有効な履歴をリプレイします。エラーが表示されます。

-restore

ツールの前回実行の開始時の状態または前回の実行で/reset、/reloadまたは/envコマンドが最後に実行されたときの状態に環境をリセットします。その時点以降の有効な履歴がリプレイされます。このオプションは、前回のJShellセッションを復元する場合に使用します。

/reset [options]
次のように入力されたスニペットをすべて破棄し、セッションを再開します。

- 指定されたオプションがある場合は、そのオプションで環境設定を更新します。

- 実行の状態をリセットします。

- 起動スクリプトを実行します。

履歴はリプレイされません。入力されたコードはすべて失われます。

コマンド行で入力した環境設定、または以前の/reset、/envまたは/reloadコマンドを使用して指定した環境設定は、設定を上書きするoptionが入力されないかぎり維持されます。

有効なオプションは次のとおりです。

--add-modules module[,module...]

初期モジュールに加えて解決するルート・モジュールを指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

--add-exports module/package=target-module[,target-module]*

source-moduleからtarget-moduleへのpackageのエクスポートを追加します。

--class-path path

クラス・ファイルを見つけるために検索されるディレクトリおよびアーカイブを指定します。このオプションはCLASSPATH環境変数のパスをオーバーライドします。環境変数を設定しておらず、このオプションを使用しない場合は、現在のディレクトリが検索されます。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

--module-path modulepath

アプリケーション・モジュールの参照先を指定します。LinuxおよびmacOSの場合は、コロン(:)を使用してリストの項目を区切ります。Windowsの場合は、セミコロン(;)を使用して項目を区切ります。

/save [options] file
スニペットおよびコマンドを指定されたファイルに保存します。オプションを入力しなかった場合、アクティブなスニペットが保存されます。

有効なオプションは次のとおりです。

-all

起動スニペット、上書きされたスニペット、失敗したスニペットを含め、すべてのスニペットを保存します。

-history

現在のセッションで入力されたすべてのコマンドおよびスニペットの順次履歴を保存します。

-start

現在の起動設定を保存します。起動スクリプトを指定しなかった場合、空のファイルが保存されます。

/set [setting]
外部エディタ、起動設定およびフィードバック・モードを含め、構成情報を設定します。このコマンドは、カスタマイズされたプロンプト、形式および切捨て値によるカスタム・フィードバック・モードの作成にも使用されます。設定を入力しなかった場合、エディタの現在の設定、起動設定およびフィードバック・モードが表示されます。

settingには、次の値が有効です。

editor [options] [command]

/editコマンドの入力時に、外部エディタの起動に使用されるコマンドを設定します。このコマンドには、空白で区切られたコマンド引数を指定できます。コマンドまたはオプションを入力しなかった場合、現在の設定が表示されます。

有効なオプションは次のとおりです。

-default

エディタを、JShellに同梱されているデフォルト・エディタに設定します。エディタを起動するためのコマンドが入力されている場合は使用できません。

-delete

セッションの開始時にエディタを有効なものに設定します。-retainオプションとともに使用した場合、保持されたエディタ設定は削除され、エディタは環境変数JSHELLEDITOR、VISUAL、EDITORの内で最初に見つかったものに設定されます。エディタ環境変数がいずれも設定されていない場合、このオプションは、エディタをデフォルト・エディタに設定します。

このオプションは、エディタを起動するためのコマンドが入力されている場合は使用できません。

-retain

セッション間でエディタ設定を保存します。他にオプションまたはコマンドを入力しなかった場合、現在の設定が保存されます。

-wait

編集の完了時を指示するようにユーザーに求めます。それ以外の場合は、エディタの終了時にJShellに制御を戻します。このオプションは、編集ウィンドウがすでに存在するときなど、使用中のエディタをすぐに終了する場合に使用します。このオプションは、エディタを起動するためのコマンドが入力されている場合にのみ有効です。

feedback [mode]
入力への応答に使用されるフィードバック・モードを設定します。モードを入力しなかった場合、現在のモードが表示されます。

有効なモードには、concise、normal、silent、verboseおよび/set modeコマンドで作成されたカスタム・モードがあります。

format mode field "format-string" selector
入力への応答で示されるフィードバックの形式を設定します。モードを入力しなかった場合、すべてのフィードバック・モードについてすべてのフィールドの現在の形式が表示されます。モードのみを入力した場合、そのモードについて現在の形式が表示されます。モードとフィールドのみを入力した場合、そのフィールドについて現在の形式が表示されます。

形式を定義する場合、次の引数は必須です。

mode

応答形式が適用されるフィードバック・モードを指定します。/set modeコマンドを使用して作成されたカスタム・モードのみ変更できます。

field

応答形式が適用されるコンテキスト固有のフィールドを指定します。フィールドについては、オンライン・ヘルプを参照してください(/help /set formatコマンドを使用してJShellからアクセスできます)。

"format-string"

指定されたフィールドおよびセレクタの応答形式として使用する文字列を指定します。形式の文字列の構造については、オンライン・ヘルプを参照してください(/help /set formatコマンドを使用してJShellからアクセスできます)。

selector

応答形式が適用されるコンテキストを指定します。セレクタについては、オンライン・ヘルプを参照してください(/help /set formatコマンドを使用してJShellからアクセスできます)。

mode [mode-name] [existing-mode] [options]
指定されたモード名でカスタム・フィードバック・モードを作成します。モード名を入力しなかった場合、すべてのモードの設定が表示され、これにはモード、プロンプト、形式および切捨ての設定が含まれます。既存のモードの名前を指定した場合、既存モードの設定が作成中のモードにコピーされます。

有効なオプションは次のとおりです。

-command|-quiet

モードの使用時にコマンドについて表示されるフィードバックのレベルを指定します。このオプションは、フィードバック・モードの作成時に必要です。-commandは、コマンドに関する情報および検証のフィードバックを表示する場合に使用します。-quietは、エラー・メッセージなど、コマンドに関するきわめて重要なフィードバックのみを表示する場合に使用します。

-delete

このセッションの名前付きフィードバック・モードを削除します。削除するモードの名前が必要です。保持されているモードを完全に削除するには、このオプションを指定して-retainオプションを使用します。事前定義済のモードは削除できません。

-retain

セッション間で名前付きフィードバック・モードを保存します。保存するモードの名前が必要です。

新しいフィードバック・モードは、/set prompt、/set formatおよび/set truncationコマンドを使用して構成します。

新しいモードを使用して起動するには、/set feedbackコマンドを使用します。

prompt mode "prompt-string" "continuation-prompt-string"
JShell内で入力に対してプロンプトを設定します。モードを入力しなかった場合、すべてのフィードバック・モードについて現在のプロンプトが表示されます。モードのみを入力した場合、そのモードについて現在のプロンプトが表示されます。

プロンプトを定義する場合、次の引数は必須です。

mode

プロンプトが適用されるフィードバック・モードを指定します。/set modeコマンドを使用して作成されたカスタム・モードのみ変更できます。

"prompt-string"

入力の最初の行に対するプロンプトとして使用する文字列を指定します。

"continuation—prompt-string"

スニペットの完成に必要な追加の入力行を求めるプロンプトとして使用する文字列を指定します。

start [-retain] [file[ file...]|option]
/reset、/reloadまたは/envコマンドの次回入力時に使用される起動スクリプトの名前を設定します。複数のスクリプトを入力した場合、スクリプトは入力順に実行されます。スクリプトまたはオプションを入力しなかった場合、現在の起動設定が表示されます。

スクリプトはローカル・ファイルまたは次の事前定義済スクリプトのいずれかにできます。

DEFAULT

デフォルトのエントリをロードします(一般にインポートとして使用されます)。

JAVASE

すべてのJava SEパッケージをインポートします。

PRINTING

print、printlnおよびprintfを、ツール内で使用するためのjshellメソッドとして定義します。

有効なオプションは次のとおりです。

-default

起動設定をデフォルト設定に設定します。

-none

起動設定を使用しないことを指定します。

-retainオプションは、セッション間で起動設定を保存する場合に使用します。

truncation mode length selector
表示される値の最大長を設定します。モードを入力しなかった場合、すべてのフィードバック・モードについて現在の切捨て値が表示されます。モードのみを入力した場合、そのモードについて現在の切捨て値が表示されます。

切捨て値を定義する場合、次の引数は必須です。

mode

切捨て値が適用されるフィードバック・モードを指定します。/set modeコマンドを使用して作成されたカスタム・モードのみ変更できます。

length

指定のセレクタの最大長として使用する符号なし整数を指定します。

selector

切捨て値が適用されるコンテキストを指定します。セレクタは、オンライン・ヘルプで説明されており、/help /set truncationコマンドを使用してJShellからアクセスできます。

/types [option]
入力されたクラス、インタフェースおよび列挙を表示します。オプションを入力しなかった場合、現在のすべてのアクティブなクラス、インタフェースおよび列強が表示されます。

有効なオプションは次のとおりです。

name[ name...]|id[ id...]

nameまたはidで指定されたクラス、インタフェースおよび列挙に関する情報を表示します。複数の変数の場合、空白で名前およびIDを区切ります。/listコマンドを使用してコード・スニペットのIDを参照します。

-all

JShellの起動時に追加されたもの、失敗したも、上書きされたもの、削除されたものを含め、すべてのクラス、インタフェースおよび列挙に関する情報を表示します。

-start

JShellの起動時に追加された起動クラス、インタフェースおよび列挙に関する情報を表示します。

/vars [option]
入力された変数の名前、型および値を表示します。オプションを入力しなかった場合、現在のすべてのアクティブな変数が表示されます。

有効なオプションは次のとおりです。

name[ name...]|id[ id...]

nameまたはidで指定された変数に関する情報を表示します。複数の変数の場合、空白で名前およびIDを区切ります。/listコマンドを使用してコード・スニペットのIDを参照します。

-all

JShellの起動時に追加された変数、失敗した変数、上書きされた変数、削除された変数を含め、すべての変数に関する情報を表示します。

-start

JShellの起動時に追加された起動変数に関する情報を表示します。

/?
/helpコマンドと同じです。

/!
最後のスニペットを再実行します。

/id
指定されたIDのスニペットを再実行します。/listコマンドを使用してコード・スニペットのIDを参照します。

/-n
n個前のスニペットを返します。たとえば、15個のコード・スニペットが入力された場合、/-4は11個目のスニペットを実行します。コマンドは、カウントに含まれません。

入力のショートカット

次の表では、JShellでのコマンドおよびスニペットの入力に使用可能なショートカットを示します。

ショートカット

使用方法

タブ補完

スニペット、コマンド、サブコマンド、コマンド引数またはコマンド・オプションの入力時に、[Tab]キーを使用して自動的に項目を入力します。入力内容から項目を判定できない場合、使用可能なオプションが提示されます。

メソッド呼出しの入力時に、メソッド呼出しの左カッコの後で[Tab]キーを使用して、メソッドのパラメータを確認します。メソッドに複数のシグネチャがある場合は、すべてのシグネチャが表示されます。[Tab]キーをもう一度押すと、メソッドと最初のシグネチャのパラメータの説明が表示されます。他のシグネチャの説明を表示するには、[Tab]キーを押し続けます。

コマンドの省略形

コマンドの省略形は、省略形でコマンドを一意に識別できる場合に受け入れられます。たとえば、/lは、/listコマンドとして認識されます。しかし、/sは、/setコマンドを指しているか、/saveコマンドを指しているか判断できないため、有効な省略形ではありません。/setコマンドの場合は/seを、/saveコマンドの場合は/saを使用します。

省略形は、サブコマンド、コマンド引数およびコマンド・オプションにも使用できます。たとえば、/m -aは、すべてのメソッドを表示する場合に使用します。

履歴のナビゲーション

セッション間で、入力された内容の履歴が保持されます。上矢印と下矢印を使用して、コマンドおよびスニペットを現在のセッションから過去のセッションまでスクロールします。[Ctrl]キーを上矢印および下矢印と一緒に使用して、複数行のスニペットの1行目を除いた全行をスキップします。

履歴の検索

[Ctrl]+[R]キーの組合せを使用して入力した文字列を履歴で検索します。プロンプトは、文字列および一致を示すように変化します。[Ctrl]+[R]は、履歴の現在の位置から後方に向かって古いエントリを検索します。[Ctrl]+[S]は、履歴の現在の位置から前方に向かって新しいエントリを検索します。

入力の編集

JShellの編集機能は、他の一般的なシェルのものと似ています。キーボードのキーおよびキーの組合せが行編集のショートカットになります。[Ctrl]キーとMetaキーは、キーの組合せで使用します。キーボードにメタ・キーがない場合、[Alt]キーをマップしてメタ・キーの機能を提供することがあります。

キーまたはキーの組合せ

処理

[Return]

現在の行を入力します。

[←]

カーソルを左に1文字移動します。

[→]

カーソルを右に1文字移動します。

[Ctrl]+[A]

カーソルを行の先頭に移動します。

[Ctrl]+[E]

カーソルを行の末尾に移動します。

Metaキー+[B]

カーソルを左に1単語移動します。

Metaキー+[F]

カーソルを右に1単語移動します。

[Delete]

カーソルの下にある文字を削除します。

[Backspace]

カーソルの前にある文字を削除します。

[Ctrl]+[K]

カーソルから行の末尾までのテキストを削除します。

Metaキー+[D]

カーソルから単語の末尾までのテキストを削除します。

[Ctrl]+[W]

カーソルから前の空白までのテキストを削除します。

[Ctrl]+[Y]

直近に削除されたテキストを行に貼り付けます。

Metaキー+[Y]

[Ctrl]+[Y]の後に押すと、前に削除したテキストが繰り返し表示されます。

JShellセッションの開始および停止の例

JShellはJDKに同梱されています。セッションを開始するには、コマンド行でjshellを入力します。ようこそメッセージが出力され、コマンドおよびスニペットを入力するためのプロンプトが示されます。

% jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell>

JShellの起動時に自動的にロードされたスニペットを確認するには、/list -startコマンドを使用します。デフォルトの起動スクリプトは、共通パッケージ用のインポート文です。各スニペットのIDは、起動スニペットであることを示す文字sで始まります。

jshell> /list -start

s1 : import java.io.*;
s2 : import java.math.*;
s3 : import java.net.*;
s4 : import java.nio.file.*;
s5 : import java.util.*;
s6 : import java.util.concurrent.*;
s7 : import java.util.function.*;
s8 : import java.util.prefs.*;
s9 : import java.util.regex.*;
s10 : import java.util.stream.*;

jshell>

セッションを終了するには、/exitコマンドを使用します。

jshell> /exit
|  Goodbye

%

スニペットの入力例

スニペットとは、Javaの文、変数定義、メソッド定義、クラス定義、インポート文および式です。末尾のセミコロンは欠落していても、スニペットの補完時に自動的に追加されます。

次の例に、2つの変数および1つのメソッドの定義と、そのメソッドの実行を示します。スクラッチ変数は、変数が指定されなかったので、結果を保持するために自動的に作成されることに注意してください。

jshell> int a=4
a ==> 4

jshell> int b=8
b ==> 8

jshell> int square(int i1) {
...> return i1 * i1;
...> }
|  created method square(int)

jshell> square(b)
$5 ==> 64

スニペットの変更例

変数、メソッドまたはクラスの定義を変更するには、その定義を再入力します。

次の例に、メソッドの定義と、そのメソッドの実行を示します。

jshell> String grade(int testScore) {
...>     if (testScore >= 90) {
...>         return "Pass";
...>     }
...>     return "Fail";
...> }
|  created method grade(int)

jshell> grade(88)
$3 ==> "Fail"

メソッドgradeをより多くの学生が合格できるように変更するには、メソッド定義を再入力して、合格点を80に変更します。前のエントリを再入力しなくても済むように上矢印キーを使用してそれらを取得し、if文に変更を加えます。次の例では、新しい定義を示し、メソッドを再実行して新しい結果を表示します。

jshell> String grade(int testScore) {
...>     if (testScore >= 80) {
...>         return "Pass";
...>     }
...>     return "Fail";
...> }
|  modified method grade(int)

jshell> grade(88)
$5 ==> "Pass"

長さが数行を超えるスニペットの場合または変更箇所が数個を超える場合は、/editコマンドを使用してエディタでスニペットを開きます。変更が完了したら、編集ウィンドウを閉じて制御をJShellセッションに戻します。次の例に、そのコマンドと、編集ウィンドウを閉じる際に示されるフィードバックを示します。/listコマンドは、合格点が85に変更されたことを表示するのに使用されています。

jshell> /edit grade
|  modified method grade(int)
jshell> /list grade

6 : String grade(int testScore) {
if (testScore >= 85) {
return "Pass";
}
return "Fail";
}

カスタム・フィードバック・モードの作成例

フィードバック・モードにより、表示されるプロンプト、スニペットの入力時に示されるフィードバック・メッセージおよび表示される値の最大長が決まります。事前定義済のフィードバック・モードが提供されています。カスタム・フィードバック・モードを作成するためのコマンドも用意されています。

/set modeコマンドを使用して、新しいフィードバック・モードを作成します。次の例では、新しいモードmymodeは事前定義済のフィードバック・モードnormalに基づいており、コマンド・フィードバックの検証が表示されます。

jshell> /set mode mymode normal -command
|  Created new feedback mode: mymode

新しいモードはnormalモードに基づいているため、プロンプトは同じです。次の例では、使用されるプロンプトを確認する方法を示し、プロンプトをカスタム文字列に変更します。最初の文字列は、標準のJShellプロンプトです。2番目の文字列は、複数行のスニペットで追加行を求めるプロンプトを表します。

jshell> /set prompt mymode
|  /set prompt mymode "\njshell> " "   ...> "

jshell> /set prompt mymode "\nprompt$ " "   continue$ "

表示される値の最大長は、切捨て設定で制御されます。値の型ごとに異なる長さを指定できます。次の例では、全体の切捨て値72、可変値の式に対する切捨て値500を設定します。

jshell> /set truncation mymode 72

jshell> /set truncation mymode 500 varvalue

スニペットの入力後に表示されるフィードバックは、形式設定によって制御され、入力されたスニペットのタイプとそのスニペットについて実行される処理に基づいています。事前定義済のモードnormalでは、メソッドの作成時に文字列createdが表示されます。次の例に、その文字列をdefinedに変更する方法を示します。

jshell> /set format mymode action "defined" added-primary

/set feedbackコマンドを使用して、作成したばかりのフィードバック・モードを使用して開始します。次の例に、使用中のカスタム・モードを示します。

jshell> /set feedback mymode
|  Feedback mode: mymode

prompt$ int square (int num1){
continue$ return num1*num1;
continue$ }
|  defined method square(int)

prompt$

4 セキュリティのツールおよびコマンド

特定のJDKセキュリティのツールおよびコマンドを使用して、セキュリティ・ポリシーをローカル・システムに設定し、リモート・サイトで設定されたセキュリティ・ポリシーの範囲内で動作するアプリケーションを作成します。

次の各項では、セキュリティ・ポリシーの設定とアプリケーションの作成に使用するセキュリティのツールおよびコマンドについて説明します。

- keytool: keytoolコマンドおよびオプションは、暗号化鍵、X.509証明書チェーンおよび信頼できる証明書を含むキーストア(データベース)の管理に使用します。

- jarsigner: jarsignerツールは、Java Archive (JAR)ファイルの署名および検証に使用します。

- policytool: policytoolは、ユーティリティGUI経由で取得したユーザー入力に基づいた、プレーン・テキストのポリシー・ファイルの読取りおよび書込みに使用します。

注意:

policytoolツールは、JDK 9では非推奨となり、次のJDKのメジャー・リリースでは削除される可能性があります。

次の各項では、Windowsシステム用のKerberosセキュリティのツールおよびコマンドについて説明します。

- kinit: kinitツールとそのオプションは、Kerberosチケット認可チケットを取得およびキャッシュする場合に使用します。

- klist: klistツールは、ローカルの資格キャッシュおよびキー表のエントリを表示する場合に使用します。

- ktab: ktabツールは、ローカルのキー表に格納されたプリンシパル名とサービス鍵を管理する場合に使用します。

keytool

keytoolコマンドおよびオプションは、暗号化鍵、X.509証明書チェーンおよび信頼できる証明書を含むキーストア(データベース)の管理に使用します。

形式

keytool [commands]

commands

「コマンド」を参照してください。これらのコマンドは、次のようにタスクごとに分類されます。

- データの作成とキーストアへの追加: -gencert、-genkeypair、-genseckey、-importcert、-importpass

- 別のキーストアからの内容のインポート: -importkeystore

- 証明書リクエストの生成: -certreq

- データのエクスポート: -exportcert

- データの表示: -list、-printcert、-printcertreq、-printcrl

- キーストアの管理: -storepasswd、-keypasswd、-delete、-changealias

- ヘルプの表示: -help

説明

keytoolコマンドは、鍵と証明書を管理するためのユーティリティです。これを使用すると、ユーザーはデジタル署名を使った自己認証(ユーザーが他のユーザーおよびサービスに対して自分自身を認証すること)やデータの整合性と証明書に関するサービスで使用する自分の公開/非公開鍵ペアと関連する証明書を管理できます。keytoolコマンドでは、通信相手の公開鍵を(証明書の形で)キャッシュすることもできます。

証明書とは、あるエンティティ(人物、会社など)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティの公開鍵(およびその他の情報)が特別な値を持っていることが書かれています。データにデジタル署名が付いている場合は、デジタル署名を検証することで、データの整合性およびデータが本物であることをチェックできます。データの整合性とは、データの変更や改変がされていないことを意味します。また、データが本物であるとは、そのデータが、データを作成して署名したと称する人物から渡されたデータであることを意味します。

また、keytoolコマンドを使って、対称暗号化および復号化(DES)で使用される秘密鍵とパスフレーズを管理することもできます。

keytoolコマンドは、鍵と証明書をキーストアに格納します。

コマンドとオプションに関する注意事項

各種のコマンドの一覧と説明については、「コマンド」を参照してください。

- どのコマンド名およびオプション名にも先頭にハイフン記号(-)が付きます。

- 各コマンドのオプションは、任意の順序で指定できます。

- イタリック体になっていないすべての項目、または中カッコか角カッコで囲まれているすべての項目は、そのとおりに指定する必要があります。

- オプションを囲む中カッコは、そのオプションをコマンド行で指定しなかったときに、デフォルト値が使用されることを意味します。中カッコは、-v、-rfcおよび-Jオプションを囲むのにも使われますが、これらのオプションはコマンド行で指定された場合にのみ意味を持ちます。これらには、オプション自体を指定しないこと以外のデフォルト値は存在しません。

- オプションを囲む角カッコは、そのオプションをコマンド行で指定しなかった場合に、ユーザーが値の入力を求められることを意味します。-keypassオプションをコマンド行で指定しなかった場合、keytoolコマンドはまず、キーストアのパスワードを使用して非公開/秘密鍵の復元を試みます。この試みが失敗すると、keytoolコマンドはユーザーに対して非公開/秘密鍵のパスワードの入力を求めます。

- イタリック体の項目の実際の値(オプションの値)は、ユーザーが指定する必要がある。たとえば、-printcertコマンドの形式は次のとおりである

keytool -printcert {-file cert_file} {-v}

-printcertコマンドを指定するときは、keytool -printcert -file VScert.cerのように、cert_fileを実際のファイル名で置換します。

- オプションの値に空白(スペース)が含まれている場合は、値を引用符で囲む必要があります。

- -helpオプションはデフォルトです。keytoolコマンドはkeytool -helpと同じです。

コマンド

-gencert

{-rfc} {-infile infile} {-outfile outfile} {-alias alias} {-sigalg sigalg}

{-dname dname} {-startdate startdate {-ext ext}* {-validity valDays}

[-keypass keypass] {-keystore keystore} [-storepass storepass]

{-storetype storetype} {-providername provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v} {-protected} {-Jjavaoption}

証明書要求ファイル(keytool -certreqコマンドで作成可能)に対する応答として、証明書を生成します。このコマンドは、infile (省略された場合は標準入力)から要求を読み取り、別名の非公開鍵を使用して要求に署名し、X.509証明書をoutfile (省略された場合は標準出力)に出力します。-rfcが指定された場合の出力形式は、Base64でエンコードされたPEMです。それ以外の場合は、バイナリDERが作成されます。

sigalgの値には、証明書の署名に使用するアルゴリズムを指定します。startdate引数は、証明書が有効になる開始時間および日付です。valDays引数には、証明書の有効日数を指定します。

dnameが指定されている場合は、生成される証明書のサブジェクトとして使用されます。そうでない場合は、証明書要求の名前が使われます。

extの値は、証明書に組み込まれるX.509拡張機能を示します。-extの構文については、「一般オプション」を参照してください。

-gencertオプションを使用すると、証明書チェーンを作成できます。次の例では、証明書チェーンに3つの証明書を含むe1という証明書を作成します。

次のコマンドでは、ca、ca1、ca2、およびe1という4つの鍵ペアを作成します。

keytool -alias ca -dname CN=CA -genkeypair
keytool -alias ca1 -dname CN=CA -genkeypair
keytool -alias ca2 -dname CN=CA -genkeypair
keytool -alias e1 -dname CN=E1 -genkeypair

次の2つのコマンドでは、署名付き証明書のチェーンを作成します。caがca1に署名し、ca1がca2に署名し、これらのすべてが自己発行されます。

keytool -alias ca1 -certreq |
keytool -alias ca -gencert -ext san=dns:ca1 |
keytool -alias ca1 -importcert

keytool -alias ca2 -certreq |
keytool -alias ca1 -gencert -ext san=dns:ca2 |
keytool -alias ca2 -importcert

次のコマンドでは、証明書e1を作成し、それをca2によって署名されたe1.certファイルに格納します。この結果、e1の証明書チェーンにはca、ca1、およびca2が含まれることになります。

keytool -alias e1 -certreq | keytool -alias ca2 -gencert > e1.cert

-genkeypair

{-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg}

[-dname dname] [-keypass keypass] {-startdate value} {-ext ext}*

{-validity valDays} {-storetype storetype} {-keystore keystore}

[-storepass storepass]

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v} {-protected} {-Jjavaoption}

鍵のペア(公開鍵および関連する非公開鍵)を生成します。公開鍵はX.509 v3自己署名証明書でラップされます。証明書は、単一の要素を持つ証明書チェーンとして格納されます。この証明書チェーンと非公開鍵は、aliasで特定される新しいキーストア・エントリに格納されます。

keyalgの値には鍵ペアの生成に使用するアルゴリズムを、keysizeの値には生成する各鍵のサイズを、それぞれ指定します。sigalgの値には、自己署名証明書に署名するときに使うアルゴリズムを指定します。このアルゴリズムは、keyalgの値と互換性がある必要があります。

dnameの値には、aliasの値に関連付けるX.500識別名を指定します。これは、自己署名証明書のissuerおよびsubjectフィールドとして使用されます。コマンド行で識別名を指定しなかった場合は、ユーザーが識別名の入力を求められます。

keypassの値には、生成される鍵のペアのうち、非公開鍵を保護するのに使うパスワードを指定します。パスワードを指定しなかった場合は、ユーザーがその入力を求められます。プロンプトで[Return]キーを押すと、鍵のパスワードがキーストアのパスワードと同じパスワードに設定されます。keypassの値は、6文字以上である必要があります。

startdateの値には、証明書の発行時間を指定します。これは、X.509証明書のValidityフィールドの「Not Before」値としても知られています。

このオプションの値は、次のいずれかの形式で設定できます。

([+-]nnn[ymdHMS])+

[yyyy/mm/dd] [HH:MM:SS]

最初の形式では、現在の時間から指定された値だけシフトした時間が発行時間になります。この値は、サブ値のシーケンスを連結したものです。各サブ値の内部では、プラス記号(+)が未来へのシフトを意味し、マイナス記号(-)が過去へのシフトを意味します。シフトする時間は、年、月、日、時、分または秒(それぞれy、m、d、H、MまたはSの1文字で示される)を単位とするnnnです。発行時間の正確な値は、左端のサブ値から順にjava.util.GregorianCalendar.add(int field, int amount)メソッドを使用して計算されます。たとえば、発行時間は次のように指定できます。

Calendar c = new GregorianCalendar();
c.add(Calendar.YEAR, -1);
c.add(Calendar.MONTH, 1);
c.add(Calendar.DATE, -1);
return c.getTime()

2番目の形式では、ユーザーが年/月/日と時間:分:秒の2つの部分に正確な発行時間を設定します(ローカル・タイムゾーンを使用)。ユーザーは、一方の部分のみを指定できます。その場合、もう一方の部分は現在の日付(または時間)と同じと見なされます。ユーザーは、形式の定義に示された正確な桁数を指定する必要があります(短い場合は0でパディングします)。日付と時間の両方を指定する場合は、2つの部分の間に空白文字を1つだけ入れます。時間は、常に24時間形式で指定してください。

このオプションを指定しなかった場合、開始日は現在の時間になります。このオプションは最大で1回しか指定できません。

valDaysの値には、証明書が有効と見なされる(-startdateで指定された日付、または-startdateが指定されていない場合は現在の日付から始まる)日数を指定します。

-genseckey

{-alias alias} {-keyalg keyalg} {-keysize keysize} [-keypass keypass]

{-storetype storetype} {-keystore keystore} [-storepass storepass]

{-providerClass provider_class_name {-providerArg provider_arg}} {-v}

{-protected} {-Jjavaoption}

秘密鍵を生成し、それをaliasで特定される新しいKeyStore.SecretKeyEntry内に格納します。

keyalgの値には秘密鍵の生成に使用するアルゴリズムを、keysizeの値には生成する鍵のサイズを、それぞれ指定します。keypassの値には、秘密鍵を保護するパスワードを指定します。パスワードを指定しなかった場合は、ユーザーがその入力を求められます。プロンプトで[Return]キーを押すと、鍵のパスワードがkeystoreに使用されるのと同じパスワードに設定されます。keypassの値は、6文字以上である必要があります。

-importcert

{-alias alias} {-file cert_file} [-keypass keypass] {-noprompt} {-trustcacerts}

{-storetype storetype} {-keystore keystore} {-cacerts cacerts}[-storepass storepass]

{-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v} {-protected} {-Jjavaoption}

ファイルcert_fileから証明書または証明書チェーン(証明書チェーンの場合は、PKCS#7形式の応答またはX.509証明書のシーケンスで提供されるもの)を読み取り、aliasによって特定されるkeystoreエントリに格納します。ファイルが指定されていない場合は、stdinから証明書または証明書チェーンを読み取ります。

keytoolコマンドでは、X.509 v1、v2、v3の証明書、およびPKCS#7タイプの証明書で構成されるPKCS#7形式の証明書チェーンをインポートできます。インポートするデータは、バイナリ・エンコード形式または出力可能エンコード形式(Base64エンコードとも呼ばれる)のどちらかで提供する必要があります。出力可能エンコード形式は、インターネットRFC 1421規格で定義されています。後者の場合、エンコードは-----BEGINで始まる文字列で開始され、-----ENDで始まる文字列で終了する必要があります。

証明書のインポートには2つの目的があります。信頼できる証明書のリストに証明書を追加することと、証明書署名要求を証明書発行局(CA)に送信した結果として、そのCAから受け取った証明書応答をインポートすること(「コマンド」の「-certreq」オプションを参照)です。

どちらのタイプのインポートを行うかは、-aliasオプションの値によって指定します。別名が鍵エントリを指していない場合、keytoolコマンドはユーザーが信頼できる証明書エントリを追加しようとしていると見なします。この場合、別名がキーストア内に存在してない必要があります。別名がすでに存在している場合、その別名の信頼できる証明書がすでに存在することになるので、keytoolコマンドはエラーを出力し、証明書のインポートを行いません。別名が鍵エントリを指している場合、keytoolコマンドはユーザーが証明書応答をインポートしようとしていると見なします。

-importpass

{-alias alias} [-keypass keypass] {-storetype storetype} {-keystore keystore}

[-storepass storepass]

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v} {-protected} {-Jjavaoption}

パスフレーズをインポートし、それをaliasで特定される新しいKeyStore.SecretKeyEntry内に格納します。パスフレーズは標準入力ストリームを介して入力できますが、そうでない場合はユーザーがその入力を求められます。keypassは、インポートされたパスフレーズを保護するために使用するパスワードです。パスワードを指定しなかった場合は、ユーザーがその入力を求められます。プロンプトで[Return]キーを押すと、鍵のパスワードがkeystoreに使用されるのと同じパスワードに設定されます。keypassは6文字以上である必要があります。

-importkeystore

-srckeystore srckeystore {-destkeystore destkeystore}

注意:

これは、すべてのオプションの1行目となります。

{-srcstoretype srcstoretype} {-deststoretype deststoretype}

[-srcstorepass srcstorepass] [-deststorepass deststorepass] {-srcprotected}

{-destprotected}

{-srcalias srcalias {-destalias destalias} [-srckeypass srckeypass]}

[-destkeypass destkeypass] {-noprompt}

{-srcProviderName src_provider_name} {-destProviderName dest_provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}} {-v}

{-protected} {-Jjavaoption}

ソース・キーストアからターゲット・キーストアへ、単一のエントリまたはすべてのエントリをインポートします。

注意:

keytool -importkeystoreコマンドを使用する場合、-destkeystoreを指定しないと、使用されるデフォルトのキーストアは$HOME/.keystoreです。

-srcaliasオプションが指定された場合、このコマンドは、その別名で特定される単一のエントリをターゲット・キーストアにインポートします。destaliasでターゲット別名が指定されなかった場合、srcaliasがターゲット別名として使用されます。ソースのエントリがパスワードで保護されていた場合、srckeypassを使ってそのエントリが回復されます。srckeypassが指定されなかった場合、keytoolコマンドはsrcstorepassを使用してそのエントリを回復しようとします。srcstorepassが指定されなかったか正しくなかった場合は、ユーザーがパスワードの入力を求められます。ターゲット・エントリはdestkeypassによって保護されます。destkeypassが指定されなかった場合、ターゲット・エントリはソース・エントリのパスワードによって保護されます。たとえば、ほとんどのサード・パーティ製ツールでは、PKCS #12キーストアのstorepassとkeypassを同じにする必要があります。これらのツール用のPKCS#12キーストアを作成するには、-destkeypassを常に-deststorepassと同じになるように指定します。

-srcaliasオプションが指定されなかった場合、ソース・キーストア内のすべてのエントリがターゲット・キーストア内にインポートされます。各ターゲット・エントリは対応するソース・エントリの別名の下に格納されます。ソースのエントリがパスワードで保護されていた場合、srcstorepassを使ってそのエントリが回復されます。srcstorepassが指定されなかったか正しくなかった場合は、ユーザーがパスワードの入力を求められます。ソース・キーストア内のあるエントリ・タイプがターゲット・キーストアでサポートされていない場合や、あるエントリをターゲット・キーストアに格納する際にエラーが発生した場合、ユーザーはそのエントリをスキップして処理を続行するか、あるいは処理を中断するかの選択を求められます。ターゲット・エントリはソース・エントリのパスワードによって保護されます。

ターゲット別名がターゲット・キーストア内にすでに存在していた場合、ユーザーは、そのエントリを上書きするか、あるいは異なる別名の下で新しいエントリを作成するかの選択を求められます。

-nopromptオプションを指定した場合、ユーザーは新しいターゲット別名の入力を求められません。既存のエントリはそのターゲット別名で上書きされます。インポートできないエントリはスキップされ、警告が表示されます。

-printcertreq

{-file file}

keytool -certreqコマンドで生成できるPKCS #10形式の証明書要求の内容を出力します。このコマンドは、ファイルから要求を読み取ります。ファイルが存在しない場合は、標準入力から要求が読み取られます。

-certreq

{-alias alias} {-dname dname} {-sigalg sigalg} {-ext  ext}* {-file certreq_file}

[-keypass keypass] {-storetype storetype} {-keystore keystore}

[-storepass storepass] {-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v} {-protected} {-Jjavaoption}

PKCS #10形式を使って証明書署名要求(CSR)を生成します。

CSRは、証明書発行局(CA)に送信することを目的としたものです。CAは、証明書要求者を(通常はオフラインで)認証し、証明書または証明書チェーンを送り返します。この証明書または証明書チェーンは、キーストア内の既存の証明書チェーン(最初は1つの自己署名証明書から構成される)に置き換えて使います。

aliasに関連付けられた非公開鍵は、PKCS #10証明書要求を作成するのに使われます。秘密鍵にアクセスするには、正しいパスワードを指定する必要があります。コマンド行でkeypassを指定しておらず、キーストアの整合性の保護に使用されるパスワードと異なる場合、そのパスワードの入力を求められます。dnameが指定された場合は、CSR内のサブジェクトとして使われます。それ以外の場合は、別名に関連付けられたX.500識別名が使われます。

sigalgの値には、CSRに署名するときに使うアルゴリズムを指定します。

CSRは、certreq_fileファイルに格納されます。ファイルが指定されていない場合は、stdoutにCSRが出力されます。

CAからの応答をインポートするには、importcertコマンドを使います。

-exportcert

{-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore}{-cacerts cacerts}

[-storepass storepass] {-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}}

{-rfc} {-v} {-protected} {-Jjavaoption}

aliasに関連付けられた証明書をキーストアから読み取り、cert_fileファイルに格納します。ファイルが指定されていない場合は、stdoutに証明書が出力されます。

デフォルトでは、バイナリ・エンコードで証明書が出力されます。-rfcオプションが指定されている場合は、インターネットRFC 1421証明書エンコード規格で定義されている出力可能エンコード形式で出力されます。

aliasが信頼できる証明書を参照している場合は、その証明書が出力されます。それ以外の場合、aliasは、関連付けられた証明書チェーンを持つ鍵エントリを参照します。この場合は、チェーン内の最初の証明書が返されます。この証明書は、aliasによって表されるエンティティの公開鍵を認証する証明書です。

-list

{-alias alias} {-storetype storetype} {-keystore keystore} {-cacerts cacerts}[-storepass storepass]

{-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v | -rfc} {-protected} {-Jjavaoption}

aliasで特定されるキーストア・エントリの内容をstdoutに出力します。aliasが指定されていない場合は、キーストア全体の内容が出力されます。

このコマンドは、デフォルトでは証明書のSHA-256フィンガプリントを出力します。-vオプションが指定されている場合は、所有者、発行者、シリアル番号、拡張機能などの付加的な情報とともに、人間が読むことのできる形式で証明書が出力されます。-rfcオプションが指定されている場合は、インターネットRFC 1421証明書エンコード規格で定義されている出力可能エンコード形式で証明書の内容が出力されます。

-vと-rfcを同時に指定することはできません。

-printcert

{-file cert_file | -sslserver host[:port]} {-jarfile JAR_file {-rfc} {-v}

{-Jjavaoption}

ファイルcert_file、host:portにあるSSLサーバーまたは署名付きJARファイルJAR_file (-jarfileオプションを使用)から証明書を読み取り、その内容を人間が読むことのできる形式で出力します。ポートが指定されなかった場合は、標準のHTTPSポート443が使用されます。-sslserverオプションと-fileオプションを同時に指定することはできません。指定しないとエラーがレポートされます。どちらのオプションも指定されていない場合は、stdinから証明書が読み取られます。

-rfcが指定されている場合、keytoolコマンドはインターネットRFC 1421証明書エンコード規格で定義されているPEMモードで証明書を出力します。

証明書がファイルまたはstdinから読み取られた場合は、バイナリ・エンコード形式またはインターネットRFC 1421証明書エンコード規格で定義されている出力可能エンコード形式で証明書が出力される可能性があります。

SSLサーバーがファイアウォールの背後にある場合は、コマンド行に-J-Dhttps.proxyHost=proxyhostおよび-J-Dhttps.proxyPort=proxyportオプションを指定してプロキシ・トンネリングを使用できます。

注意: このオプションはキーストアとは関係なく使用できます。

-printcrl

-file crl_ {-v}

ファイルcrl_から証明書失効リスト(CRL)を読み込みます。CRLは、発行元のCAによって取り消されたデジタル証明書のリストです。CAはcrl_ファイルを生成します。

注意: このオプションはキーストアとは関係なく使用できます。

-storepasswd

[-new new_storepass] {-storetype storetype} {-keystore keystore}{-cacerts cacerts}

[-storepass storepass] {-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v} {-Jjavaoption}

キーストアの内容の整合性を保護するために使うパスワードを変更します。new_storepassには、新しいパスワードを指定します。これは6文字以上である必要があります。

-keypasswd

{-alias alias} [-keypass old_keypass] [-new new_keypass] {-storetype storetype}

{-keystore keystore}  [-storepass storepass] {-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}} {-v}

{-Jjavaoption}

aliasによって特定される非公開/秘密鍵を保護するためのパスワードを、old_keypassからnew_keypassに変更します。これは6文字以上である必要があります。

コマンド行で-keypassオプションを指定しておらず、鍵のパスワードがキーストアのパスワードと異なる場合は、鍵のパスワードの入力を求められます。

コマンド行で-newオプションを指定しなかった場合は、新しいパスワードの入力を求められます

-delete

[-alias alias] {-storetype storetype} {-keystore keystore} {-cacerts cacerts}[-storepass storepass]

{-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}}

{-v} {-protected} {-Jjavaoption}

aliasによって特定されるエントリをキーストアから削除します。コマンド行で別名を指定しなかった場合は、別名の入力を求められます。

-changealias

{-alias alias} [-destalias destalias] [-keypass keypass] {-storetype storetype}

{-keystore keystore}{-cacerts cacerts} [-storepass storepass] {-providerName provider_name}

{-providerClass provider_class_name {-providerArg provider_arg}} {-v}

{-protected} {-Jjavaoption}

既存のキーストア・エントリを指定されたaliasから新しい別名destaliasに移動します。ターゲット別名が指定されなかった場合、このコマンドはその入力を求めます。元のエントリがエントリ・パスワードで保護されていた場合、-keypassオプションでそのパスワードを指定できます。鍵のパスワードが指定されなかった場合、storepass (指定された場合)がまず試みられます。その試みが失敗すると、ユーザーはパスワードの入力を求められます。

—help

基本的なコマンドとそのオプションの一覧を表示します。

特定のコマンドの詳細を表示するには、keytool -command_name -helpと入力します(command_nameはコマンドの名前です)。

一般オプション

-vオプションは、-helpコマンドを除くすべてのコマンドで使用できます。-vオプションを指定した場合、冗長モードになり、詳細な情報が出力されます。

また、-Jjavaoption引数も、任意のコマンドで使用できます。-Jjavaoptionを指定した場合、指定されたjavaoption文字列がJavaインタプリタに直接渡されます。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションのリストを表示するには、コマンド行でjava -hまたはjava -Xと入力します。

これらのオプションは、キーストアに対する操作を行うすべてのコマンドで指定できます。

-storetype storetype

この修飾子は、インスタンスを生成するキーストアのタイプを指定します。

-keystore keystore

キーストアの場所を指定します。

JKS storetypeが使用され、かつキーストア・ファイルがまだ存在していなかった場合、特定のkeytoolコマンドを実行すると、新しいキーストア・ファイルが作成されます。たとえば、keytool -genkeypairの呼出し時に-keystoreオプションが指定されなかった場合、.keystoreという名前のデフォルト・キーストア・ファイルがユーザーのホーム・ディレクトリ内にまだ存在していなければ、そこに作成されます。同様に、-keystore ks_fileオプションが指定されてks_fileが存在しなかった場合は、そのファイルが作成されます。JKS storetypeの詳細は、「キーストアの別名」の「キーストアの実装」を参照してください。

-keystoreオプションからの入力ストリームは、KeyStore.loadメソッドに渡されます。URLとしてNONEが指定されている場合は、nullのストリームがKeyStore.loadメソッドに渡されます。NONEは、キーストアがファイルベースでない場合に指定します。たとえば、ハードウェア・トークン・デバイスに置かれている場合などです。

-cacerts cacerts

cacertsキーストアに対して作用します。このオプションは、"-keystore path_to_cacerts -storetype type_of_cacerts"と同等です。-keystoreまたは-storetypeオプションが-cacertsオプションとともに使用されると、エラーがレポートされます。

-storepass [:env | :file ] argument

キーストアの整合性を保護するために使うパスワードを指定します。

修飾子envまたはfileが指定されていない場合、パスワードの値はargumentです。これは6文字以上である必要があります。それ以外の場合、パスワードは次のように取得されます。

- env: argumentという名前の環境変数からパスワードを取得します。

- file: argumentという名前のファイルからパスワードを取得します。

注意: -keypass、-srckeypass、-destkeypass、-srcstorepass、-deststorepassなど、パスワードが必要な他のすべてのオプションは修飾子envおよびfileを受け入れます。パスワード・オプションと修飾子は必ずコロン(:)で区切ってください。

このパスワードは、キーストアの内容にアクセスするすべてのコマンドで使われます。このようなコマンドでは、コマンド行で-storepassオプションを指定しなかった場合、パスワードの入力を求められます。

キーストアから情報を取り出す場合、パスワードはオプションです。パスワードを指定しなかった場合は、取得された情報の整合性を検証できないため、警告が表示されます。

-providerName provider_name

セキュリティ・プロパティ・ファイル内に含まれる暗号化サービス・プロバイダ名を特定するために使用されます。

-providerClass provider_class_name

暗号化サービス・プロバイダがセキュリティ・プロパティ・ファイルに指定されていないときに、そのマスター・クラス・ファイルの名前を指定する場合に使用されます。

-providerArg provider_arg

-providerClassオプションとともに使用され、provider_class_nameのコンストラクタに対するオプションの文字列入力引数を表します。

-protected=true|false

専用PINリーダーなどの保護された認証パスを介してパスワードを指定する必要がある場合は、この値をtrueとして指定してください。-importkeystoreコマンドには2つのキーストアが関係しているため、2つのオプション-srcprotectedおよび-destprotectedをそれぞれソース・キーストアおよびターゲット・キーストアとして指定します。

-ext {name{:critical} {=value}}

X.509証明書の拡張機能を示します。このオプションは、-genkeypairおよび-gencertで、生成された証明書に拡張機能を組み込むため、または-certreqで、証明書要求で要求された拡張機能を表示するために使用できます。このオプションは、複数回使用できます。name引数には、サポートされている拡張機能名(「名前付き拡張機能」を参照)または任意のOID番号を指定できます。value引数を指定した場合は、拡張機能の引数を示します。valueを省略した場合は、拡張機能のデフォルト値(拡張機能が引数を必要としないこと)を意味します。修飾子:criticalを指定した場合は、拡張機能のisCritical属性がtrueであることを意味し、それ以外の場合はfalseであることを意味します。:criticalのかわりに:cを使用できます。

オプション値の例

次の例は、各種のオプション値のデフォルトを示しています。

-alias "mykey"

-keyalg
"DSA" (when using -genkeypair)
"DES" (when using -genseckey)

-keysize
2048 (when using -genkeypair and -keyalg is "RSA")
2048 (when using -genkeypair and -keyalg is "DSA")
256 (when using -genkeypair and -keyalg is "EC")
56 (when using -genseckey and -keyalg is "DES")
168 (when using -genseckey and -keyalg is "DESede")

-validity 90

-keystore <the file named .keystore in the user's home directory>

-destkeystore <the file named .keystore in the user's home directory>

-storetype <the value of the "keystore.type" property in the
security properties file, which is returned by the static
getDefaultType method in java.security.KeyStore>

-file
stdin (if reading)
stdout (if writing)

-protected false

証明書または証明書要求の生成中、次に示すように適切なレベルのセキュリティ強度を提供するために、デフォルトの署名アルゴリズム(-sigalgオプション)が基礎となる非公開鍵のアルゴリズムから導出されます。

keyalg

keysize

デフォルトのsigalg

DSA

任意のサイズ

SHA256withDSA

RSA

<= 3072

<= 7680

> 7680

SHA256withRSA

SHA384withRSA

SHA512withRSA

EC

<384

<512

= 512

SHA256withECDSA

SHA384withECDSA

SHA512withECDSA

注意:

追加設定なしのセキュリティを向上させるために、デフォルトのキー・サイズおよび署名アルゴリズム名はJDKの各リリースでより強い値に定期的に更新されます。JDKの旧リリースとの相互運用性が重要である場合は、デフォルトがそれらのリリースでサポートされていることを確認してください。あるいは、-keysizeオプションまたは-sigalgオプションを使用して自己責任でデフォルト値をオーバーライドしてください。

サポートされている名前付き拡張機能

keytoolコマンドは、これらの名前付き拡張機能をサポートしています。名前は、大/小文字が区別されません。

BCまたはBasicContraints

値: 完全な形式であるca:{true|false}[,pathlen:len]またはca:true,pathlen:lenの短縮形であるlen。lenを省略すると、ca:trueの意味になります。

KUまたはKeyUsage

値: usage(,usage)*。usageはdigitalSignature、nonRepudiation (contentCommitment)、keyEncipherment、dataEncipherment、keyAgreement、keyCertSign、cRLSign、encipherOnly、decipherOnlyのいずれかです。usage引数は、あいまいさがないかぎり、最初の数文字(digitalSignatureの場合はdig)に短縮したり、キャメル記法(digitalSignatureの場合はdS、cRLSignの場合はcRLS)で指定できます。usageの値の大文字と小文字は区別されます。

EKUまたはExtendedKeyUsage

値: usage(,usage)*。usageはanyExtendedKeyUsage、serverAuth、clientAuth、codeSigning、emailProtection、timeStamping、OCSPSigning、任意のOID文字列のいずれかです。usage引数は、あいまいさがないかぎり、最初の数文字に短縮したり、キャメル記法で指定できます。usageの値の大文字と小文字は区別されます。

SANまたはSubjectAlternativeName

値: type:value(,type:value)*。typeはEMAIL、URI、DNS、IP、OIDのいずれかです。value引数はtypeを表す文字列形式の値です。

IANまたはIssuerAlternativeName

値: SubjectAlternativeNameと同じです。

SIAまたはSubjectInfoAccess

値: method:location-type:location-value (,method:location-type:location-value)*。methodはtimeStamping、caRepository、任意のOIDのいずれかです。location-typeおよびlocation-value引数はSubjectAlternativeName拡張機能でサポートされている任意のtype:valueです。

AIAまたはAuthorityInfoAccess

値: SubjectInfoAccessと同じです。method引数はocsp、caIssuers、任意のOIDのいずれかです。

nameがOIDである場合、valueはOCTET STRINGのtypeおよびlengthバイトを除く拡張機能のextnValueの16進数でダンプされたDERエンコードです。16進文字列では、標準の16進数(0-9、a-f、A-F)以外の余分な文字は無視されます。したがって、01:02:03:04と01020304はどちらも同じ値として受け入れられます。値がない場合は、拡張機能に空の値のフィールドが含まれます。

特別な名前であるhonoredは、-gencertでのみ使用され、証明書要求に含まれる拡張機能をどのように受け付けるかを示します。この名前のvalueは、all (要求されたすべての拡張機能を受け付ける)、name{:[critical|non-critical]} (名前付き拡張機能を受け付けるが、異なるisCritical属性を使用する)、および-name (allとともに使用し、例外を示す)のカンマ区切りリストです。要求された拡張機能は、デフォルトでは受け付けられません。

-ext honoredオプションとは別に、名前またはOIDによる-extオプションを指定すると、すでに受け付けられた拡張機能にその拡張機能が追加されます。ただし、この名前(またはOID)が受け付けられた値に含まれる場合は、その値とクリティカルの程度が要求内の設定をオーバーライドします。名前またはOIDによって同じタイプの拡張機能が複数回指定されると、最後の指定のみが使用されます。

subjectKeyIdentifier拡張機能は常に作成されます。自己署名でない証明書の場合は、authorityKeyIdentifierが作成されます。

注: ユーザーは、拡張機能(および証明書のほかのフィールド)の組み合わせによってはインターネット標準に準拠しない場合があることに注意してください。「証明書の適合性に関する警告」を参照してください。

キーストア作成中に実行されるタスクの例

次の各例では、公開/秘密鍵のペアと信頼できるエンティティからの証明書を管理するためのキーストアを作成する一連の処理について説明します。

- 鍵ペアの生成例

- CAに対する署名付き証明書の要求例

- CAからの証明書のインポート例

- CAからの証明書応答のインポート例

- 公開鍵を認証する証明書のエクスポート例

- キーストアのインポート例

- SSLサーバー用の証明書の生成例

鍵ペアの生成例

最初に、キーストアを作成し、鍵ペアを生成します。次のように、コマンドを1行に入力して使用できます。

keytool -genkeypair -dname "cn=myname, ou=mygroup, o=mycompany, c=mycountry"
-alias business -keypass password
-keystore /working/mykeystore
-storepass password -validity 180

このコマンドは、作業ディレクトリにmykeystoreという名前のキーストアを作成し(キーストアはまだ存在していないことが前提)、作成したキーストアに<new password for keystore>で指定されたパスワードを割り当てます。生成する公開鍵と非公開鍵のペアに対応するエンティティの識別名は、共通名がMark Jones、組織単位がJava、組織がOracle、2文字の国コードがUSです。鍵はどちらも2048ビットで、鍵の作成にはデフォルトのDSA鍵生成アルゴリズムを使用します

このコマンドは、デフォルトのSHA256withDSA署名アルゴリズムを使用して、公開鍵と識別名情報を含む自己署名証明書を作成します。証明書は、有効期間が180日で、別名businessで特定されるキーストア・エントリ内の非公開鍵に関連付けられます。非公開鍵には、new password for private keyで指定されたパスワードが割り当てられます。

オプションのデフォルト値を使うと、コマンドが大幅に短くなります。その場合、オプションを指定する必要はありません。指定しなかったオプションにデフォルト値があれば、デフォルト値が使用されます。必要な値については入力を求められます。たとえば、次のように入力することもできます。

keytool -genkeypair

この場合は、mykeyという別名でキーストア・エントリが作成され、新しく生成された鍵のペア、および90日間有効な証明書がこのエントリに格納されます。このエントリは、ホーム・ディレクトリ内の.keystoreという名前のキーストアに置かれます。このキーストアがまだ存在していない場合は、作成されます。識別名情報、キーストアのパスワードおよび非公開鍵のパスワードについては、入力を求められます。

以降の例では、オプションを指定しないで-genkeypairコマンドを実行したものとし、値の入力を求められた場合は、最初の-genkeypairコマンドに指定した値を入力したものとします。たとえば、識別名をcn=myname, ou=mygroup, o=mycompany, c=mycountryとします。

CAに対する署名付き証明書の要求例

鍵ペアの生成によって、自己署名証明書が作成されました。証明書に証明書発行局(CA)の署名が付いていれば、他のユーザーが証明書を信頼できる可能性も高くなります。CAの署名を取得するには、まず、次のように証明書署名要求(CSR)を生成します。

keytool -certreq -file myname.csr

これは、デフォルトの別名mykeyによって特定されるエンティティのCSRを作成し、要求をmyname.csrという名前のファイルに入れます。このファイルをVeriSignなどのCAに提出します。CAは要求者を(通常はオフラインで)認証し、要求者の公開鍵を認証した署名付きの証明書を送り返します。場合によっては、CAが証明書のチェーンを返すこともあります。証明書のチェーンでは、各証明書がチェーン内の前の署名者の公開鍵を認証します。

CAからの証明書のインポート例

次に、自己署名証明書を証明書チェーンで置き換える必要があります。証明書チェーンでは、各証明書がチェーン内の前の証明書の署名者の公開鍵を認証し、それがルートCAまで続きます。

CAからの証明書応答をインポートするには、キーストアか、cacertsキーストア・ファイル内に1つ以上の信頼できる証明書がある必要があります。「コマンド」の「-importcert」を参照してください。

- 証明書応答が証明書チェーンの場合は、チェーンのトップの証明書が必要です。そのCAの公開鍵を認証するルートCAの証明書です。

- 証明書応答が単一の証明書の場合は、(その証明書に署名した)発行元CAの証明書が必要です。その証明書が自己署名されていない場合は、その署名者の証明書が必要となり、このようにして自己署名付きのルートCA証明書まで必要になります。

cacertsキーストア・ファイルは、複数のVeriSignルートCA証明書を含んだ状態で出荷されているので、VeriSignの証明書を、信頼できる証明書としてキーストア内にインポートする必要はない可能性があります。ただし、他のCAに対して署名付き証明書を要求していて、このCAの公開鍵を認証する証明書がcacertsに追加されなかった場合は、CAからの証明書を信頼できる証明書としてインポートする必要があります。

通常、CAからの証明書は、自己署名証明書、または別のCAによって署名された証明書です。後者の場合は、その別のCAの公開鍵を認証する証明書が必要です。たとえば、ABCという企業がCAであり、そのCAの公開鍵を認証するABCからの自己署名証明書と考えられるABCCA.cerという名前のファイルを入手したとします。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。まず、keytool -printcertコマンドを使用するか、または-nopromptオプションを指定せずにkeytool -importcertコマンドを使用して証明書の内容を表示し、表示された証明書のフィンガプリントが期待されるフィンガプリントと一致するかどうかを確認します。証明書を送信した人物に連絡し、表示されたフィンガプリントを、この人物が提示した(または安全な公開鍵のリポジトリによって提示される)フィンガプリントと比較します。フィンガプリントが一致した場合にのみ、送信途中で他の何者か(攻撃者など)の証明書ですり替えられていないことを保証できます。このような攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのものを信頼することになります。

証明書を有効なものとして信頼する場合は、次のコマンドを使って証明書をキーストアに追加できます。

keytool -importcert -alias abc -file ABCCA.cer

このコマンドは、ファイルABCCA.cerのデータを含む信頼できる証明書のエントリをキーストア内に作成し、そのエントリに別名abcを割り当てます。

CAからの証明書応答のインポート例

証明書署名要求の提出先のCAの公開鍵を認証する証明書をインポートした後は(または同種の証明書がすでにcacertsファイル内に存在している場合は)、証明書応答をインポートし、自己署名証明書を証明書チェーンで置き換えることができます。この証明書チェーンは、CAの応答がチェーンの場合、証明書署名要求に対する応答としてCAから送り返された証明書チェーンです。また、CAの応答が単一の証明書の場合は、この証明応答と、応答のインポート先のキーストア内またはcacertsキーストア・ファイル内にすでに存在する信頼できる証明書とを使って構築した証明書チェーンです。

たとえば、証明書署名要求をVeriSignに送信して、送り返された証明書の名前がVSmyname.cerだった場合は、次のようにして応答をインポートできます。

keytool -importcert -trustcacerts -file VSmyname.cer

公開鍵を認証する証明書のエクスポート例

jarsignerコマンドを使ってJava Archive (JAR)ファイルに署名した場合、このファイルを使用するクライアントは署名を認証する必要があります。クライアントが認証する方法の1つは、最初に署名者の公開鍵証明書を信頼できるエントリとしてクライアントのキーストアにインポートすることです。

そのために、証明書をエクスポートしてクライアントに提供できます。たとえば、エントリにmykeyという別名があるとした場合、次のコマンドを使用して証明書をmyname.cerという名前のファイルにコピーできます。

keytool -exportcert -alias mykey -file myname.cer

証明書と署名付きJARファイルを入手したクライアントは、jarsignerコマンドを使って署名を認証できます。

キーストアのインポート例

コマンドimportkeystoreを使えば、あるキーストアの全体を別のキーストア内にインポートできます。これは、鍵や証明書といったソース・キーストア内のすべてのエントリが、単一のコマンドを使ってターゲット・キーストア内にインポートされることを意味します。このコマンドを使えば、異なるタイプのキーストア内に含まれるエントリをインポートできます。インポート時には、ターゲット・キーストア内の新しいエントリはすべて、同じ別名および(秘密鍵や非公開鍵の場合は)保護用パスワードを持ちます。ソース・キーストアから非公開鍵または秘密鍵を回復できない場合、keytoolコマンドはユーザーにパスワードの入力を求めます。このコマンドは、別名の重複を検出すると、ユーザーに新しい別名の入力を求めます。ユーザーは、新しい別名を指定することも、既存の別名の上書きをkeytoolコマンドに許可することもできます。

たとえば、通常のJKSタイプのキーストアkey.jksからPKCS #11タイプのハードウェアベースのキーストアにエントリをインポートするには、次のコマンドを使用します。

keytool -importkeystore
-srckeystore key.jks -destkeystore NONE
-srcstoretype JKS -deststoretype PKCS11
-srcstorepass password
-deststorepass password

また、importkeystoreコマンドを使用して、ソース・キーストア内の単一のエントリをターゲット・キーストアにインポートすることもできます。この場合、前の例で示したオプションに加え、インポート対象となる別名を指定する必要があります。-srcaliasオプションを指定すると、ターゲット別名もコマンド行から指定できる他、秘密/非公開鍵の保護用パスワードやターゲット保護用パスワードも指定できます。その方法を示すコマンドを次に示します。

keytool -importkeystore
-srckeystore key.jks -destkeystore NONE
-srcstoretype JKS -deststoretype PKCS11
-srcstorepass password
-deststorepass password
-srcalias myprivatekey -destalias myoldprivatekey
-srckeypass password
-destkeypass password
-noprompt

SSLサーバー用の証明書の生成例

ルートCA (root)、中間CA (ca)およびSSLサーバー(server)の3つのエンティティ用の鍵ペアと証明書を生成するkeytoolコマンドを次に示します。すべての証明書が同じキーストアに格納されていることを確認してください。これらの例では、鍵アルゴリズムとしてRSAをお薦めします。

keytool -genkeypair -keystore root.jks -alias root -ext bc:c
keytool -genkeypair -keystore ca.jks -alias ca -ext bc:c
keytool -genkeypair -keystore server.jks -alias server

keytool -keystore root.jks -alias root -exportcert -rfc > root.pem

keytool -storepass password -keystore ca.jks -certreq -alias ca |
keytool -storepass password -keystore root.jks
-gencert -alias root -ext BC=0 -rfc > ca.pem
keytool -keystore ca.jks -importcert -alias ca -file ca.pem

keytool -storepass password -keystore server.jks -certreq -alias server |
keytool -storepass password -keystore ca.jks -gencert -alias ca
-ext ku:c=dig,kE -rfc > server.pem
cat root.pem ca.pem server.pem |
keytool -keystore server.jks -importcert -alias server

用語

キーストア

キーストアは、暗号化の鍵と証明書を格納するための機能です。

キーストアのエントリ

キーストアには様々なタイプのエントリを含めることができます。keytoolコマンドでもっとも適用範囲の広いエントリ・タイプは、次の2つです。

鍵のエントリ - 各エントリは、非常に重要な暗号化の鍵の情報を保持します。この情報は、未許可のアクセスを防ぐために、保護された形で格納されます。一般に、このタイプのエントリに格納される鍵は、秘密鍵か、または対応する公開鍵の証明書チェーンを伴う非公開鍵です。「証明書チェーン」を参照してください。keytoolコマンドがこの両方のタイプのエントリを処理できるのに対し、jarsignerツールは後者のタイプのエントリ、つまり非公開鍵とそれに関連付けられた証明書チェーンのみを処理します。

信頼できる証明書のエントリ - 各エントリは、別のパーティに属する公開鍵証明書を1つ含んでいます。このエントリは信頼できる証明書と呼ばれます。これは、キーストアの所有者が、証明書内の公開鍵が証明書のサブジェクト(所有者)によって識別されたアイデンティティに属することを信頼しているためです。証明書の発行者は、証明書に署名を付けることによって、その内容を保証します。

キーストアの別名

キーストアのすべてのエントリ(鍵および信頼できる証明書のエントリ)は、一意の別名を介してアクセスされます。

別名を指定するのは、-genseckeyコマンドを使って秘密鍵を生成したり、-genkeypairコマンドを使って鍵ペア(公開鍵と非公開鍵)を生成したり、-importcertコマンドを使って証明書または証明書チェーンを信頼できる証明書のリストに追加したりするなど、特定のエンティティをキーストアに追加する場合です。これ以後、keytoolコマンドでエンティティを参照する場合は、このときに指定した別名を使用する必要があります。

たとえば、dukeという別名を使って新しい公開鍵と非公開鍵のペアを生成し、公開鍵を自己署名証明書でラップするには、次のコマンドを実行します。「証明書チェーン」を参照してください。

keytool -genkeypair -alias duke -keypass dukekeypasswd

この例では、初期パスワードとしてdukekeypasswdを指定しています。以後、別名dukeに関連付けられた非公開鍵にアクセスするコマンドを実行するときは、このパスワードが必要になります。Dukeの非公開鍵のパスワードを後で変更する場合は、次のようなコマンドを実行します。

keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass

これにより、パスワードがdukekeypasswdからnewpassに変更されます。テストを目的とする場合、またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンド行で指定しなかった場合は、その入力を求められます。

キーストアの実装

java.securityパッケージで提供されるKeyStoreクラスには、キーストア内の情報に対するアクセスと変更を行うための明確に定義されたインタフェースが用意されています。複数の異なる固定実装を生成できます(それぞれ特定の型のキーストアを実装)。

現在、keytoolとjarsignerの2つのコマンド行ツールと、Policy ToolというGUIベースのツールが、キーストアの実装を使用しています。KeyStoreクラスはpublicであるため、ユーザーはこのクラスを使用する追加のセキュリティ・アプリケーションを作成できます。

JDK 9から、デフォルトのキーストアの実装はPKCS12です。これは、RSA PKCS12 Personal Information Exchange Syntax Standardに基づくクロス・プラットフォーム・キーストアです。この規格は、ユーザーの非公開鍵、証明書、その他の秘密を格納および転送することを主な目的としています。Oracleが提供する別の組込みの実装があります。これは、JKSという独自のキーストア・タイプ(形式)を使用してキーストアをファイルとして実装します。この実装では、個々の非公開鍵は個別のパスワードによって保護され、キーストア全体の整合性も(非公開鍵とは別の)パスワードによって保護されます。

キーストアの実装は、プロバイダ・ベースです。具体的には、KeyStoreで提供されるアプリケーション・インタフェースがService Provider Interface (SPI)という形で実装されています。つまり、対応するKeystoreSpi抽象クラスが(やはりjava.securityパッケージ内に)あり、プロバイダが実装する必要があるService Provider Interfaceメソッドを定義しています。プロバイダとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、プロバイダを実装して統合する手順に関する項で説明されているように、クライアントがプロバイダを実装し、KeystoreSpiサブクラスの実装を提供する必要があります。

アプリケーションでは、KeyStoreクラスで提供されるgetInstanceファクトリ・メソッドを使うことで、様々なプロバイダから異なるタイプのキーストア実装を選択できます。キーストア・タイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開/秘密鍵とキーストアの整合性を保護するために使われるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。

keytoolコマンドは、任意のファイルベース・キーストア実装で動作します。コマンド行で渡されたキーストアの場所をファイル名として扱い、それをFileInputStreamに変換して、そこからキーストア情報をロードします。jarsignerおよびpolicytoolコマンドは、URLを使って指定できる任意の場所からキーストアを読み取ることができます。

keytoolとjarsignerの場合は、-storetypeオプションを使ってコマンド行でキーストア・タイプを指定できます。Policy Toolの場合は、「キーストア」メニューによってキーストア・タイプを指定できます。

キーストアのタイプを明示的に指定しなかった場合、ツールはセキュリティ・プロパティ・ファイル内で指定されたkeystore.typeプロパティの値に基づいてキーストア実装を選択します。セキュリティ・プロパティ・ファイルは、java.securityという名前で、セキュリティ・プロパティ・ディレクトリにあります。

- Oracle Solaris、LinuxおよびOS X: java.home/lib/security

- Windows: java.home\lib\security

各ツールは、keystore.type値を取得してから、現在インストールされているすべてのプロバイダを調べて、そのタイプのキーストアを実装しているものを見つけます。その後、そのプロバイダのキーストアの実装を使用します。KeyStoreクラスには、アプリケーションとアプレットがkeystore.typeプロパティの値を取得するためのgetDefaultTypeという名前のstaticメソッドが定義されています。次のコード行は、keystore.typeプロパティで指定されたデフォルトのキーストア・タイプのインスタンスを生成します。

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

デフォルトのキーストア・タイプは、pkcs12で、RSA PKCS12 Personal Information Exchange Syntax Standardに基づいたクロス・プラットフォーム・キーストアです。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。

keystore.type=pkcs12

各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、Oracleのjksキーストアの実装を使用する場合は、行を次のとおり変更します。

keystore.type=jks

注意: キーストア・タイプの指定では、大文字と小文字は区別されません。たとえば、JKSとjksは同じものと見なされます。

証明書

証明書(または公開鍵証明書)とは、あるエンティティ(発行者)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティ(サブジェクト)の公開鍵およびその他の情報が特定の値を持っていることが書かれています。証明書に関連する用語は次のとおりです。

公開鍵: 特定のエンティティに関連付けられた数値であり、そのエンティティとの間に信頼できる関係を持つ必要があるすべての人に対して公開することを意図したものです。公開鍵は、署名を検証するのに使われます。

デジタル署名: データがデジタル署名されると、そのデータは、エンティティのアイデンティティと、そのエンティティがデータの内容について知っていることを証明する署名とともに格納されます。エンティティの非公開鍵を使ってデータに署名を付けると、データの偽造は不可能になります。

アイデンティティ: エンティティを特定するための既知の方法です。システムによっては、公開鍵をアイデンティティにするものがあります。他にも、Oracle Solaris UIDや電子メール・アドレス、X.509識別名など、様々なものをアイデンティティにすることが可能です。

署名: 署名は、エンティティの非公開鍵を使い、あるデータに対して計算されるものです。署名者は、証明書の場合は発行者とも呼ばれます。

非公開鍵: 特定のエンティティのみが知っているはずの数値であり、その数値がそのエンティティの非公開鍵になります(つまり、秘密にしておく必要があります)。非公開鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSAなどの典型的な公開鍵暗号化システムの場合、1つの非公開鍵は厳密に1つの公開鍵に対応します。非公開鍵は、署名を計算するのに使われます。

エンティティ: エンティティは、人、組織、プログラム、コンピュータ、企業、銀行など、一定の度合いで信頼の対象となる様々なものを指します。

公開鍵暗号化では、ユーザーの公開鍵にアクセスする必要があります。大規模なネットワーク環境では、互いに通信しているエンティティ間で以前の関係が確立されたことや、使われているすべての公開鍵を収めた信頼できるリポジトリが存在することは保証できません。このような公開鍵の配布に関する問題を解決するために証明書が考案されました。現在では、証明書発行局(CA)が信頼できる第三者として機能します。CAは、他のエンティティの証明書に署名(発行)することを信頼して任されている企業などのエンティティです。CAは法律上の契約に拘束されるので、有効かつ信頼できる証明書のみを作成するものとして扱われます。VeriSign、Thawte、Entrustなど、多くの公開証明書発行局が存在します。

Microsoftの認証サーバーやEntrustのCA製品などを所属組織内で利用すれば、独自の証明書発行局を運営することも可能です。keytoolコマンドを使って、証明書の表示、インポートおよびエクスポートができます。また、自己署名証明書を生成することもできます。

現在、keytoolコマンドはX.509証明書を対象にしています。

X.509証明書

X.509規格では、証明書に含める情報が定義されており、この情報を証明書に書き込む方法(データ形式)についても記述されています。証明書のすべてのデータは、ASN.1/DERと呼ばれる2つの関連規格を使ってエンコードされます。Abstract Syntax Notation 1はデータについて記述しています。Definite Encoding Rulesはデータの保存および転送の方法について記述しています。

すべてのX.509証明書は、署名のほかに次のデータを含んでいます。

バージョン: 証明書に適用されるX.509規格のバージョンを特定します。証明書に指定できる情報は、バージョンによって異なります。これまでに、3つのバージョンが定義されています。keytoolコマンドでは、v1、v2およびv3の証明書のインポートとエクスポートが可能です。生成されるのは、v3の証明書です。

X.509 Version 1は、1988年から利用されて広く普及しており、もっとも一般的です。

X.509 Version 2では、サブジェクトや発行者の名前を後で再利用できるようにするために、サブジェクトと発行者の一意識別子の概念が導入されました。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意な識別子を使用しないことが、強く推奨されています。Version 2の証明書は、広くは使用されていません。

X.509 Version 3はもっとも新しい(1996年)規格で、拡張機能の概念をサポートしています。拡張機能は、だれでも定義でき、証明書に含めることができます。一般的な拡張機能としては、KeyUsage (signing-onlyなど、鍵の使用を特定の目的に制限する)、AlternativeNames (DNS名、電子メール・アドレス、IPアドレスなど、他のアイデンティティをこの公開鍵に関連付けることができる)などがあります。拡張機能には、criticalというマークを付けて、その拡張機能のチェックと適用または使用を義務付けることができます。たとえば、criticalとマークされ、KeyCertSignが設定されたkeyCertSign拡張機能が証明書に含まれている場合、この証明書をSSL通信中に提示すると、証明書が拒否されます。これは、証明書の拡張機能によって、関連する非公開鍵が証明書の署名専用として指定されており、SSLでは使用できないためです。

シリアル番号: 証明書を作成したエンティティは、そのエンティティが発行する他の証明書と区別するために、証明書にシリアル番号を割り当てます。この情報は、様々な方法で使われます。たとえば、証明書が取り消されると、シリアル番号が証明書の取消しリスト(CRL)に格納されます。

署名アルゴリズム識別子: 証明書に署名を付けるときにCAが使ったアルゴリズムを特定します。

発行者名: 証明書に署名を付けたエンティティのX.500識別名です。「X.500識別名」を参照してください。これは、通常はCAです。この証明書を使うことは、証明書に署名を付けたエンティティを信頼することを意味します。ルートまたはトップ・レベルのCAの証明書など、発行者が自身の証明書に署名を付ける場合もあります。

有効期間: 各証明書は、限られた期間のみ有効になります。この期間は開始の日時と終了の日時によって指定され、数秒の短い期間から100年という長期にわたることもあります。選択される有効期間は、証明書への署名に使われる非公開鍵の強度や証明書に支払う金額など、様々な要因で異なります。有効期間は、使用する非公開鍵が損なわれない場合に、エンティティが公開鍵を信頼できると期待される期間です。

サブジェクト名: 証明書で公開鍵が識別されているエンティティの名前です。この名前はX.500標準を使うので、インターネット全体で一意なものと想定されます。これは、エンティティのX.500識別名(DN)です。次に例を示します。

CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US

これらはそれぞれサブジェクトの共通名(CN)、組織単位(OU)、組織(O)および国(C)を表します。

サブジェクトの公開鍵情報: 名前を付けられたエンティティの公開鍵とアルゴリズム識別子です。アルゴリズム識別子は、この鍵が属する公開鍵暗号化システムと、関連する鍵パラメータを指定します。

証明書チェーン

keytoolコマンドでは、非公開鍵および関連する証明書チェーンを含むキーストアの鍵エントリを作成して管理できます。このようなエントリでは、非公開鍵に対応する公開鍵は、チェーンの最初の証明書に含まれています。

鍵を初めて生成すると、自己署名証明書という1つの要素のみを含むチェーンが開始されます。「コマンド」の「-genkeypair」を参照してください。自己署名証明書は、発行者(署名者)がサブジェクトと同じである証明書のことです。このサブジェクトは、証明書によって公開鍵が認証されるエンティティです。-genkeypairコマンドを呼び出して新しい公開鍵と非公開鍵のペアを作成すると、公開鍵は常に自己署名証明書でラップされます。

その後、-certreqコマンドを使って証明書署名要求(CSR)が生成され、証明書発行局(CA)に送信されると、CAからの応答が-importcertを使ってインポートされ、この自己署名証明書が証明書のチェーンによって置き換えられます。「コマンド」の「-certreq」および「-importcert」オプションを参照してください。チェーンの最後にあるのは、Subjectの公開鍵を認証したCAが発行した証明書(応答)です。チェーン内のその次の証明書は、CAの公開鍵を認証する証明書です。

多くの場合、これは自己署名証明書(CAが自身の公開鍵を認証した証明書)であり、チェーンの最後の証明書です。場合によっては、CAが証明書のチェーンを返すこともあります。この場合、チェーン内の最後の証明書(CAによって署名され、鍵エントリの公開鍵を認証する証明書)に変わりはありませんが、チェーン内の2番目の証明書は、別のCAによって署名され、CSRの送信先のCAの公開鍵を認証する証明書になります。チェーン内の次の証明書は、2番目のCAの鍵を認証する証明書になります。以下同様に、自己署名されたルート証明書に達するまでチェーンが続きます。したがって、チェーン内の(最初の証明書以後の)各証明書では、チェーン内の前の証明書の署名者の公開鍵が認証されていることになります。

多くのCAは、チェーンをサポートせずに発行済の証明書のみを返します。特に、中間のCAが存在しないフラットな階層構造の場合は、その傾向が顕著です。このような場合は、キーストアにすでに格納されている信頼できる証明書情報から、証明書チェーンを確立する必要があります。

別の応答形式(PKCS #7標準で定義されている形式)には、発行済の証明書に加え、証明書チェーンのサポートが含まれています。keytoolコマンドでは、どちらの応答形式も扱うことができます。

トップ・レベル(ルート) CAの証明書は、自己署名証明書です。ただし、ルートの公開鍵に対する信頼は、ルートの証明書自体から導き出されるものではなく、新聞などの他の情報源に由来するものです。これは、だれでもVeriSignルートCAのような識別名を使って自己署名証明書を作成できるためです。ルートCAの公開鍵は広く知られています。ルートCAの公開鍵を証明書に格納する理由は、証明書という形式にすることで多くのツールから利用できるようになるからにすぎません。つまり、この場合の証明書は、ルートCAの公開鍵を運ぶ媒体として利用されるだけです。ルートCAの証明書をキーストアに追加するときは、その前に-printcertオプションを使って証明書の内容を表示し、表示されたフィンガプリントを新聞やルートCAのWebページなどから入手した既知のフィンガプリントと比較する必要があります。

cacerts証明書ファイル

cacertsという証明書ファイルは、セキュリティ・プロパティ・ディレクトリにあります。

- Oracle Solaris、LinuxおよびOS X: JAVA_HOME /lib/security

- Windows: java.home\lib\security

java.homeは、ランタイム環境ディレクトリであり、JDKのjreディレクトリまたはJava Runtime Environment (JRE)の最上位ディレクトリです。

cacertsファイルは、CAの証明書を含むシステム全体のキーストアを表します。システム管理者は、キーストア・タイプにjksを指定することで、keytoolコマンドを使ってこのファイルの構成と管理を行うことができます。cacertsキーストア・ファイルは、一連のデフォルトのルートCA証明書を含んだ状態で出荷されています。Oracle Solaris、Linux、OS XおよびWindowsでは、次のコマンドを使用してデフォルトの証明書をリストできます。

keytool -list -cacerts

cacertsキーストア・ファイルの初期パスワードは、changeitです。システム管理者は、SDKのインストール後、このファイルのパスワードとデフォルト・アクセス権を変更する必要があります。

注意: cacertsファイルを検証することは重要です。cacertsファイル内のCAは、証明書の署名や他のエンティティへの発行を行うエンティティとして信頼されるため、cacertsファイルの管理は慎重に行う必要があります。cacertsファイルには、信頼するCAの証明書のみが含まれている必要があります。ユーザーは、自身の責任で、cacertsファイルにバンドルされている信頼できるルートCA証明書を検証し、信頼性に関する独自の決定を行います。

信頼できないCA証明書をcacertsファイルから削除するには、keytoolコマンドのdeleteオプションを使用します。cacertsファイルはJREのインストール・ディレクトリにあります。このファイルを編集するアクセス権がない場合は、システム管理者に連絡してください。

インターネットRFC 1421証明書エンコード規格

多くの場合、証明書は、バイナリ符号化ではなく、インターネットRFC 1421規格で定義されている出力可能符号化方式を使って格納されます。Base64エンコードとも呼ばれるこの証明書形式では、電子メールやその他のメカニズムを通じて、他のアプリケーションに証明書を容易にエクスポートできます。

-importcertコマンドと-printcertコマンドでは、この形式の証明書とバイナリ符号化の証明書を読み込むことができます。-exportcertコマンドでは、デフォルトでバイナリ・エンコードの証明書が出力されます。ただし、-rfcオプションを指定した場合は、出力可能エンコード形式の証明書が出力されます。

デフォルトでは、-listコマンドは証明書のSHA-256フィンガプリントを出力します。-vオプションを指定すると、人間が読むことのできる形式で証明書が出力されます。-rfcオプションを指定すると、出力可能エンコード形式で証明書が出力されます。

出力可能エンコード形式でエンコードされた証明書の先頭と末尾は、次のテキストで指定されます。

-----BEGIN CERTIFICATE-----

encoded certificate goes here.

-----END CERTIFICATE-----

X.500識別名

X.500識別名は、エンティティを特定するために使われます。たとえば、X.509証明書のsubjectフィールドとissuer (署名者)フィールドで指定される名前は、X.500識別名です。keytoolコマンドは、次のサブパートをサポートしています。

commonName - 人の共通名(Susan Jonesなど)。

organizationUnit: 小さな組織(部、課など)の名称。たとえば、Purchasing (仕入部)など。

localityName: 地域(都市)名(Palo Altoなど)。

stateName: 州名または地方名(Californiaなど)。

country: 2文字の国コード(CHなど)。

(-genkeypairコマンドなどの)-dnameオプションの値として識別名文字列を指定する場合は、次の形式で文字列を指定する必要があります。

CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode

次の項目はすべて実際に指定する値を表し、前述のキーワードは次の短縮形です。

CN=commonName
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country

識別名文字列の例を次に示します。

CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US

このような文字列を使ったコマンドの例を次に示します。

keytool -genkeypair -dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino,
S=California, C=US" -alias mark

キーワードの短縮形では、大文字と小文字は区別されません。たとえば、CN、cnおよびCnはどれも同じものとして扱われます。

一方、キーワードの指定順序には意味があり、各サブコンポーネントは上に示した順序で指定する必要があります。ただし、サブコンポーネントをすべて指定する必要はありません。たとえば、次のように一部のみを指定できます。

CN=Smith, OU=Java, O=Oracle, C=US

識別名文字列の値にカンマが含まれる場合に、コマンド行で文字列を指定するときには、次のようにカンマをバックスラッシュ(\)文字でエスケープする必要があります。

cn=Jack, ou=Java\, Product Development, o=Oracle, c=US

識別名文字列をコマンド行で指定する必要はありません。識別名を必要とするコマンドを実行するときに、コマンド行で識別名を指定しなかった場合は、ユーザーが各サブコンポーネントについて入力を求められます。この場合は、カンマをバックスラッシュ(\)でエスケープする必要はありません。

警告

信頼できる証明書のインポートに関する警告

重要: 信頼できる証明書としてインポートする前に、証明書の内容を慎重に調べてください。

Windowsの例:

まず、-printcertコマンドを使用するか、または-nopromptオプションを指定せずに-importcertコマンドを使用して、証明書を表示します。表示された証明書のフィンガプリントが期待されるフィンガプリントと一致するかどうかを確認します。たとえば、あるユーザーから電子メールなどで証明書が送られてきて、それを\tmp\certという名前のファイルに格納したとします。その場合、信頼できる証明書のリストにこの証明書を追加する前に、次のように-printcertコマンドを実行してフィンガプリントを表示できます。

keytool -printcert -file \tmp\cert
Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll
Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll
Serial Number: 59092b34
Valid from: Thu Jun 24 18:01:13 PDT 2016 until: Wed Jun 23 17:01:13 PST 2016
Certificate Fingerprints:

SHA-1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE
SHA-256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:
17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4

Oracle Solarisの例:

まず、-printcertコマンドを使用するか、または-nopromptオプションを指定せずに-importcertコマンドを使用して、証明書を表示します。表示された証明書のフィンガプリントが期待されるフィンガプリントと一致するかどうかを確認します。たとえば、あるユーザーから電子メールなどで証明書が送られてきて、それを/tmp/certという名前のファイルに格納したとします。その場合、信頼できる証明書のリストにこの証明書を追加する前に、次のように-printcertコマンドを実行してフィンガプリントを表示できます。

keytool -printcert -file /tmp/cert
Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll
Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll
Serial Number: 59092b34
Valid from: Thu Jun 24 18:01:13 PDT 2016 until: Wed Jun 23 17:01:13 PST 2016
Certificate Fingerprints:

SHA-1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE
SHA-256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:
17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4

次に、証明書を送信した人物に連絡し、この人物が提示したフィンガプリントと、上のコマンドで表示されたフィンガプリントとを比較します。フィンガプリントが一致した場合にのみ、送信途中で他の何者かの証明書(攻撃者の証明書など)ですり替えられていないことを保証できます。このような攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのもの(攻撃的意図を持つクラス・ファイルを含んだJARファイルなど)を信頼することになります。

注意: 証明書をインポートする前に必ず-printcertコマンドを実行する必要があるわけではありません。キーストア内の信頼できる証明書のリストに証明書を追加する前に-importcertコマンドを実行すると、証明書の情報が出力され、確認を求めるメッセージが表示されます。インポート操作は、この時点で中止できます。ただし、これが可能なのは、-nopromptオプションを指定せずに-importcertコマンドを呼び出した場合のみです。-nopromptオプションを指定した場合、ユーザーとの対話は行われません。

パスワードに関する警告

キーストアに対する操作を行うほとんどのコマンドでは、ストアのパスワードが必要です。また、一部のコマンドでは、非公開/秘密鍵のパスワードが必要になることがあります。パスワードは、コマンド行の-storepassおよび-keypassオプションで指定できます。ただし、テストを目的とする場合、またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンド行で指定しなかった場合は、その入力を求められます。

証明書の適合性に関する警告

インターネットX.509公開鍵インフラストラクチャ証明書および証明書失効リスト(CRL)プロファイルでは、適合するX.509証明書に関するプロファイルを定義しており、これには、証明書のフィールドや拡張機能で有効な値や値の組合せが含まれています。

keytoolコマンドでは、これらの規則がすべて適用されているわけではないので、内部テスト目的で使用する自己署名証明書など、標準に準拠しない証明書が生成される可能性があります。標準に準拠しない証明書は、JREやその他のアプリケーションで拒否されることがあります。ユーザーは、-dnameや-extなどに必ず正しいオプションを指定するようにしてください。

新しい信頼できる証明書のインポート

キーストアに証明書を追加する前に、keytoolコマンドはその証明書を検証するため、キーストア内にすでに存在する信頼できる証明書を使って、追加する証明書から(ルートCAに属する)自己署名証明書までの信頼チェーンの構築を試みます。

-trustcacertsオプションを指定した場合、追加する証明書は信頼チェーン(つまり、cacertsという名前のファイルに含まれる証明書)と見なされます。

keytoolコマンドが、インポートする証明書から自己署名証明書(キーストアまたはcacertsファイルに含まれている自己署名証明書)までの信頼パスの構築に失敗した場合は、インポートする証明書の情報が出力され、ユーザーは確認を求められます。この場合は、表示された証明書のフィンガプリントを、他のなんらかの(信頼できる)情報源(証明書の所有者本人など)から入手したフィンガプリントと比較します。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。ユーザーは、この時点でインポート操作を中止できます。-nopromptオプションを指定した場合、ユーザーとの対話は行われません。

証明書応答のインポート

証明書応答をインポートするときは、キーストア内の信頼できる証明書、および(-trustcacertsオプションが指定されている場合は) cacertsキーストア・ファイルで構成された証明書を使って証明書応答が検証されます。「cacerts証明書ファイル」を参照してください。

証明書応答が信頼できるかどうかを判定する方法は次のとおりです。

- 証明書応答が単一のX.509証明書である場合、keytoolコマンドは証明書応答から(ルートCAに属する)自己署名証明書までの信頼チェーンの確立を試みます。証明書応答と証明書の階層構造は、別名の新しい証明書チェーンからの証明書応答を認証するために使われます。信頼チェーンが確立されない場合、証明書応答はインポートされません。この場合、keytoolコマンドは証明書を出力せず、ユーザーに確認を求めます。これは、証明書応答が本物かどうかをユーザーが判定するのは非常に難しいためです。

- 証明書応答がPKCS #7形式の証明書チェーンまたはX.509証明書のシーケンスである場合は、ユーザー証明書が最初で、次に0個以上のCA証明書が続くようにチェーンが並べ替えられます。チェーンが自己署名のルートCA証明書で終わり、 -trustcacertsオプションが指定されている場合、keytoolコマンドは、その証明書と、キーストア内またはcacertsキーストア・ファイル内の信頼できるすべての証明書を照合しようとします。チェーンの最後がルートCAの自己署名証明書ではなく、-trustcacertsオプションが指定された場合、keytoolコマンドは、キーストア内またはcacertsキーストア・ファイル内の信頼できる証明書からルートCAの自己署名証明書を見つけ、チェーンの最後に追加しようとします。証明書が見つからず、-nopromptオプションが指定されてない場合は、チェーンの最後の証明書に関する情報が出力され、ユーザーはそれを確認するように求められます。

証明書応答内の公開鍵がaliasにすでに格納されているユーザーの公開鍵と一致した場合、古い証明書チェーンが応答内の新しい証明書チェーンで置き換えられます。古いチェーンを置き換えることができるのは、有効なkeypass、つまり該当するエントリの非公開鍵を保護するためのパスワードを指定した場合のみです。パスワードを指定しておらず、非公開鍵のパスワードがキーストアのパスワードと異なる場合は、非公開鍵のパスワードの入力を求められます。

このコマンドは、以前のリリースでは-importという名前でした。この古い名前は、このリリースでも引き続きサポートされています。今後は新しい名前である-importcertを使用することをお薦めします。

jarsigner

jarsignerツールは、Java Archive (JAR)ファイルの署名および検証に使用します。

形式

jarsigner [ options ] jar-file alias jarsigner -verify [ options ] jar-file [alias ...]

jarsigner -verify [ options ] jar-file [alias ...]

options

コマンド行オプションです。「jarsignerのオプション」を参照してください。

-verify

-verifyオプションでは、JARファイル名の後に0個以上のキーストア別名を指定できます。-verifyオプションを指定すると、jarsignerコマンドは、JARファイル内の個々の署名済エントリを検証するために使用された証明書がいずれかのキーストア別名と一致するかどうかを確認します。別名は、-keystoreで指定されたキーストアまたはデフォルトのキーストアで定義されています。

-strictオプションも指定した場合は、jarsignerコマンドで重大な警告が検出されると、「jarは検証されました - 署名者エラーがあります。」というメッセージが表示されます。

jar-file

署名が付けられるJARファイルです。

-strictオプションも指定した場合は、jarsignerコマンドで重大な警告が検出されると、「jar signed, with signer errors」というメッセージが表示されます。

alias

別名は、-keystoreで指定されたキーストアまたはデフォルトのキーストアで定義されています。

説明

jarsignerツールの目的は次の2つです。

- Java Archive (JAR)ファイルに署名を付ける。

- 署名付きJARファイルの署名と整合性を検証する。

JAR機能を使用すると、クラス・ファイル、イメージ、サウンドおよびその他のデジタル・データを単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。開発者は、jarという名前のツールを使用してJARファイルを作成できます。(技術的な観点から言えば、ZIPファイルはいずれもJARファイルとみなすこともできます。ただし、jarコマンドによって作成されたJARファイル、またはjarsignerコマンドによって処理されたJARファイルには、META-INF/MANIFEST.MFファイルも含まれています。)

デジタル署名は、なんらかのデータ(署名の対象となるデータ)と、エンティティ(人、会社など)の秘密鍵とに基づいて計算されるビット列です。手書きの署名と同様に、デジタル署名には多くの利点があります。

- 署名の生成に使われた秘密鍵と対になる公開鍵を使用して計算を行うことで、デジタル署名が本物かどうかを検証できる。

- 非公開鍵が他人に知られないかぎり、偽造は不可能である。

- デジタル署名は、その署名が付いたデータのみを対象とするものであり、他のデータの署名として機能することはありません。

- 署名付きデータは変更できない。データが変更された場合は、その署名が本物であることが検証できない。

ファイルに対してエンティティの署名を生成するには、まず、エンティティは、そのエンティティに関連する公開鍵と秘密鍵のペアを持つ必要があります。また、公開鍵を認証する1つまたは複数の証明書も必要です。証明書とは、あるエンティティが発行したデジタル署名付きの文書であり、別のエンティティの公開鍵が特定の値であることを証明しています。

jarsignerコマンドは、キーストアに含まれる鍵と証明書情報を使用して、JARファイルのデジタル署名を生成します。キーストアは、秘密鍵とそれに関連するX.509証明書チェーン(対応する公開鍵を認証する)が格納されたデータベースです。キーストアの作成と管理には、keytoolコマンドを使用します。

jarsignerコマンドは、エンティティの秘密鍵を使用して署名を生成します。署名付きJARファイルには、ファイルの署名に使用する秘密鍵に対応する公開鍵を保存するキーストアから取った証明書のコピーも含まれています。jarsignerコマンドは、署名付きJARファイルのデジタル署名を、ファイル内(の署名ブロック・ファイル)に含まれている証明書を使用して検証できます。

jarsignerコマンドはタイムスタンプを含む署名を生成できるので、システムやデプロイヤ(Java Plug-inを含む)はJARファイルが署名証明書の有効期間中に署名されたかどうかをチェックできます。

注意:

Java Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。プラグインを必要とするアプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

さらに、アプリケーションはAPIを使用してタイムスタンプ情報を取得できます。

現時点では、jarsignerコマンドで署名できるのは、jarコマンドで作成されたJARファイルまたはZIPファイルのみです。JARファイルはzipファイルと同じですが、JARファイルにはMETA-INF/MANIFEST.MFファイルが含まれている点が異なります。META-INF/MANIFEST.MFファイルは、jarsignerコマンドがzipファイルに署名を付けるときに作成されます。

デフォルトでは、jarsignerコマンドはJARまたはzipファイルに署名を付けます。署名付きJARファイルを検証する場合は、-verifyオプションを使用します。

また、jarsignerコマンドは、署名または検証後に署名者の証明書の検証も試みます。検証エラーやその他の問題が発生した場合は、コマンドによって警告メッセージが生成されます。-strictオプションを指定した場合は、コマンドで重大な警告がエラーとして処理されます。「エラーと警告」を参照してください。

キーストアの別名

キーストアのすべてのエントリは、一意の別名を使用してアクセスされます。

jarsignerコマンドを使用してJARファイルに署名を付けるときは、署名の生成に必要な秘密鍵を含むキーストア・エントリの別名を指定する必要があります。出力ファイルが指定されていない場合、元のJARファイルは署名付きのJARファイルによって上書きされます。

キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンド行で指定しないと、入力を求められます。同様に、秘密鍵もキーストア内でパスワードによって保護されているため、秘密鍵のパスワードを指定する必要があります。コマンド行で秘密鍵のパスワードを指定せず、指定したパスワードが保存されているパスワードと異なる場合には、秘密鍵のパスワードの入力を求められます。

キーストアの場所

jarsignerコマンドには、使用するキーストアのURLを指定する-keystoreオプションがあります。キーストアは、デフォルトではユーザーのホーム・ディレクトリの.keystoreという名前のファイルに格納されます。ユーザーのホーム・ディレクトリは、user.homeシステム・プロパティによって決まります。

Oracle Solaris、LinuxおよびOS X: user.homeがデフォルトでユーザーのホーム・ディレクトリになっています。

-keystoreオプションからの入力ストリームは、KeyStore.loadメソッドに渡されます。URLとしてNONEが指定されている場合は、nullのストリームがKeyStore.loadメソッドに渡されます。NONEは、KeyStoreクラスがファイルベースではなく、たとえば、ハードウェア・トークン・デバイスに置かれている場合に指定してください。

キーストアの実装

java.securityパッケージで提供されるKeyStoreクラスには、キーストア内の情報に対するアクセスと変更を行うための明確に定義されたインタフェースが用意されています。複数の異なる固定実装を生成できます(それぞれ特定のタイプのキーストアを実装)。

現在、キーストアの実装を使用するものとして、2つのコマンド行ツール(keytoolとjarsigner)があります。policytoolというGUIベースのツールも使用できますが、非推奨であり、将来のJDKリリースでは削除される可能性があります。KeyStoreクラスはpublicとして使用可能なので、JDKユーザーはKeyStoreを使用した他のセキュリティ・アプリケーションも作成できます。

デフォルトのキーストアの実装はPKCS12です。これは、RSA PKCS12 Personal Information Exchange Syntax Standardに基づくクロス・プラットフォーム・キーストアです。この規格は、ユーザーの非公開鍵、証明書、その他の秘密を格納および転送することを主な目的としています。Oracleが提供する別の組込みの実装があります。これは、JKSという独自のキーストア・タイプ(形式)を使用してキーストアをファイルとして実装します。この実装では、個々の非公開鍵は個別のパスワードによって保護され、キーストア全体の整合性も(非公開鍵とは別の)パスワードによって保護されます。

キーストアの実装はプロバイダベースです。つまり、KeyStoreクラスが提供するアプリケーション・インタフェースは、Service Provider Interface (SPI)という形で実装されています。対応するKeystoreSpi抽象クラス(これもjava.securityパッケージ内)があり、プロバイダが実装する必要があるService Provider Interfaceメソッドを定義しています。ここで、プロバイダとは、Java Security APIによってアクセス可能なサービスのサブセットに対して、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、「Java暗号化アーキテクチャでのプロバイダの実装方法」で説明されているように、クライアントがプロバイダを実装し、KeystoreSpiサブクラスの実装を提供する必要があります。

アプリケーションでは、KeyStoreクラスのgetInstanceファクトリ・メソッドを使用することで、様々なプロバイダから異なるタイプのキーストア実装を選択できます。キーストアのタイプは、キーストア情報のストレージ形式とデータ形式を定義するとともに、キーストア内の秘密鍵とキーストア自体の整合性を保護するために使われるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。

jarsignerおよびpolicytoolコマンドは、URLを使用して指定可能な任意の場所からファイルベースのキーストアを読み取ることができます。さらに、これらのコマンドは、WindowsではMSCAPI、すべてのプラットフォームではPKCS11によって提供されるキーストアなどのファイルベースではないキーストアも読み取ることができます。

jarsignerおよびkeytoolコマンドの場合は、-storetypeオプションを使用してコマンド行でキーストアのタイプを指定できます。Policy Toolの場合は、「キーストア」メニューの「編集」コマンドを使用してキーストアのタイプを指定できます。

キーストアのタイプを明示的に指定しなかった場合、ツールはセキュリティ・プロパティ・ファイル内で指定されたkeystore.typeプロパティの値に基づいてキーストア実装を選択します。セキュリティ・プロパティ・ファイルは、java.securityという名前で、JDKのセキュリティ・プロパティ・ディレクトリjava.home/conf/securityにあります。

各ツールは、keystore.type値を取得してから、インストールされているすべてのプロバイダを調べてそのタイプのキーストアを実装しているものを見つけます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使います。

KeyStoreクラスには、アプリケーションとアプレットがkeystore.typeプロパティの値を取得するためのgetDefaultTypeという名前のstaticメソッドが定義されています。次のコード行は、デフォルトのキーストア・タイプ(keystore.type propertyプロパティで指定されたもの)のインスタンスを生成します。

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

デフォルトのキーストア・タイプは、pkcs12で、RSA PKCS12 Personal Information Exchange Syntax Standardに基づいたクロス・プラットフォーム・キーストアです。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。

keystore.type=pkcs12

キーストア・タイプの指定では、大文字と小文字は区別されません。たとえば、JKSとjksは同じです。

各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、Oracleのjksキーストアの実装を使用する場合は、行を次のとおり変更します。

keystore.type=jks

サポートされるアルゴリズム

デフォルトでは、jarsignerコマンドは、非公開鍵のタイプおよびサイズに応じて次のいずれかのアルゴリズム・ファイルを使用してJARファイルに署名します。

keyalg

keysize

デフォルトのsigalg

DSA

任意のサイズ

SHA256withDSA

RSA

<= 3072

<= 7680

> 7680

SHA256withRSA

SHA384withRSA

SHA512withRSA

EC

<384

<512

= 512

SHA256withECDSA

SHA384withECDSA

SHA512withECDSA

これらのデフォルトの署名アルゴリズムは、-sigalgオプションを使用してオーバーライドできます。

署名付きJARファイル・アルゴリズムは、検証(-verify)時にjdk.jar.disabledAlgorithmsセキュリティ・プロパティと照合されます。JARファイルが無効なアルゴリズムを使用して署名されている場合、署名されていないJARファイルとして処理されます。詳細な検証出力が必要な場合は、-J-Djava.security.debug=jarを指定します。jdk.jar.disabledAlgorithmsセキュリティ・プロパティのデフォルト値は、(JREの$JAVA_HOME/conf/securityディレクトリにある)java.securityファイルで定義します。

注意:

追加設定なしのセキュリティを向上させるために、デフォルトのキー・サイズおよび署名アルゴリズム名はJDKの各リリースでより強い値に定期的に更新されます。JDKの旧リリースとの相互運用性が重要である場合は、デフォルトがそれらのリリースでサポートされていることを確認してください。あるいは、-sigalgオプションを使用して自己責任でデフォルト値をオーバーライドしてください。

署名付きJARファイル

jarsignerコマンドを使用してJARファイルに署名を付けた場合、出力される署名付きJARファイルは入力JARファイルと同じですが、次の2つの追加ファイルがMETA-INFディレクトリに置かれる点が異なります。

- .SF拡張子の付いた署名ファイル

- .DSA、.RSAまたは.EC拡張子の付いた署名ブロック・ファイル

これら2つのファイルのベース・ファイル名は、-sigFileオプションの値から作成されます。たとえば、オプションが-sigFile MKSIGNの場合、ファイルの名前はMKSIGN.SFおよびMKSIGN.DSAになります。

コマンド行で-sigfileオプションが出現しない場合、.SFファイルと.DSAファイルのベース・ファイル名は、コマンド行で指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字をアンダースコア(_)に置き換えてファイル名が作成されます。有効な文字は、アルファベット、数字、アンダースコア、ハイフンです。

署名ファイル

署名ファイル(.SFファイル)は、jarsignerコマンドで署名を付けたJARファイルに常に含まれるマニフェスト・ファイルと似ています。マニフェスト・ファイルと同様に、.SFファイルには、JARファイルに含まれているソース・ファイルごとに、次に示す3つの行があります。

- ファイル名

- ダイジェスト・アルゴリズム(SHA)の名前

- SHAダイジェストの値

マニフェスト・ファイルでは、SHAダイジェストの値は、ソース・ファイルのバイナリ・データのダイジェスト(ハッシュ)です。.SFファイルでは、指定されたソース・ファイルのダイジェストの値は、マニフェスト・ファイル中の該当するソース・ファイルに対応する3行のハッシュです。

署名ファイルには、デフォルトでマニフェスト・ファイル全体のハッシュが格納されたヘッダーが含まれています。ヘッダーには、マニフェスト・ヘッダーのハッシュも格納されています。ヘッダーが存在すると、検証の最適化が有効になります。「JARファイルの検証」を参照してください。

署名ブロック・ファイル

.SFファイルには署名が付けられ、署名は署名ブロック・ファイルに置かれます。このファイルには、キーストアからの証明書または証明書チェーンも符号化された形で含まれています。証明書または証明書チェーンは、署名に使われた秘密鍵に対応する公開鍵を認証します。ファイルの拡張子は、使用されるダイジェスト・アルゴリズムに応じて.DSA、.RSA、.ECのいずれかになります。

署名タイムスタンプ

jarsignerコマンドを次のオプションとともに使用すると、JARファイルの署名時に署名タイムスタンプを生成して保存できます。

- -tsa url

- -tsacert alias

- -tsapolicyid policyid

- -tsadigestalg algorithm

「jarsignerのオプション」を参照してください。

JARファイルの検証

JARファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以後にJARファイル内のどのファイルも変更されていない場合です。JARファイルの検証は、次の手順で行われます。

1. .SFファイルの署名を検証します。
この手順では、各署名ブロック(.DSA)ファイルに格納されている署名が、公開鍵に対応する秘密鍵を使用して生成されたものであることを確認します。.DSAファイルには、公開鍵の証明書(または証明書チェーン)も含まれています。また、この手順では、目的の署名が、対応する署名(.SF)ファイル内の有効な署名であるかどうかを調べ、.SFファイルが改ざんされていないことも確認します。

2. .SFファイル内の各エントリのダイジェストをマニフェスト内の対応する各セクションと突き合わせて検証します。
.SFファイルには、マニフェスト・ファイル全体のハッシュが格納されたヘッダーがデフォルトで含まれています。このヘッダーが存在する場合は、ヘッダー内のハッシュがマニフェスト・ファイルのハッシュと一致するかどうかを検証できます。一致する場合、検証は次の手順に進みます。

一致しない場合は、効率的には劣る方法を使用した検証が必要になります。具体的には、.SFファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致するかどうかが確認されます。「署名ファイル」を参照してください。

.SFファイルのヘッダーに格納されたマニフェスト・ファイルのハッシュと、実際のマニフェスト・ファイルのハッシュとが一致しない場合は、署名および.SFファイルの生成後に、JARファイルに1つ以上のファイルが追加(jarツールを使用)された可能性があります。jarツールを使用してファイルを追加した場合、新しいファイル用のセクションを追加することでマニフェスト・ファイルは変更されますが、.SFファイルは変更されません。署名の生成時にJARファイル内に存在していたファイルのうち、どのファイルも変更されていない場合は、検証は成功したとみなされます。これは、.SFファイルのヘッダー以外のセクションに格納されたハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致すると発生します。

3. JARファイル内のファイルのうち、.SFファイル内にエントリを持つ各ファイルを読み込みます。読込み中にファイルのダイジェストを計算し、結果をマニフェスト・セクション内の該当するファイルのダイジェストと比較します。2つのダイジェストは同じでなければならず、そうでない場合は検証が失敗します。
検証プロセスの途中でなんらかの重大な検証エラーが発生した場合、検証プロセスは中止され、セキュリティ例外がスローされます。jarsignerコマンドは、例外をキャッチして表示します。

4. 無効なアルゴリズムの使用がないかチェックします。「サポートされるアルゴリズム」を参照してください。

注意:

追加の警告(または、-strictオプションを指定した場合はエラー)はすべて読む必要があります。同様に、証明が信頼できるかを決定するために、(-verboseおよび-certsオプションを指定して)証明書の内容も読む必要があります。

1つのJARファイルを対象とする複数の署名

1つのJARファイルに対してjarsignerコマンドを複数回実行し、実行のたびに、異なるユーザーの別名を指定すれば、JARファイルに複数のユーザーの署名を付けることができます。

jarsigner myBundle.jar susan
jarsigner myBundle.jar kevin

JARファイルが複数回署名されている場合、そのJARファイルには.SFファイルと.DSAファイルの対が複数含まれることになります。この対は、1回の署名に対して1つ作成されます。上の例で出力されるJARファイルには、次の名前を持つファイルが含まれます。

SUSAN.SF
SUSAN.DSA
KEVIN.SF
KEVIN.DSA

jarsignerのオプション

次の各項では、jarsignerのオプションについて説明します。次の標準に注意してください。

- どのオプション名にも先頭にハイフン記号(-)が付きます。

- オプションは任意の順序で指定できる。

- イタリック体または下線付きの項目(オプションの値)は、実際に指定する必要がある値を表す。

- -storepass、-keypass、-sigfile、-sigalg、-digestalg、-signedjarおよびTSA関連のオプションはJARファイルに署名時にのみ関連し、署名付きJARファイルの検証時には関連しません。-keystoreオプションは、JARファイルの署名と検証に関連します。さらに、JARファイルの署名時および検証時には別名が指定されます。

-keystore url

キーストアの場所を示すURLを指定します。このデフォルトは、ユーザーのホーム・ディレクトリ内のファイル.keystoreです。ユーザーのホーム・ディレクトリは、user.homeシステム・プロパティによって決まります。

署名するときはキーストアが必要です。デフォルトのキーストアが存在しない場合、あるいはデフォルト以外のキーストアを使用する場合は、キーストアを明示的に指定する必要があります。

検証するときはキーストアは必要ありません。ただし、キーストアが指定されているか、あるいはデフォルトのキーストアが存在していて、さらに-verboseオプションも指定されていた場合、JARファイルの検証に使用される証明書がそのキーストアに1つでも含まれているかどうかに関する追加情報が出力されます。

-keystoreの引数には、URLの代わりにファイル名とパスを指定できます。この場合は、file: URLと同様に処理されます。たとえば、次に示す例は同等です。

-keystore filePathAndName
-keystore file:filePathAndName

JREの$JAVA_HOME/conf/securityディレクトリに格納されたjava.securityセキュリティ・プロパティ・ファイル内でSun PKCS #11プロバイダが構成されている場合、次のオプションを指定することで、keytoolおよびjarsignerツールはPKCS #11トークンに基づいて動作できます。

-keystore NONE
-storetype PKCS11

たとえば、次のコマンドは、構成されたPKCS#11トークンの内容を一覧表示します。

keytool -keystore NONE -storetype PKCS11 -list

-storepass[:env | :file] argument

キーストアにアクセスするのに必要なパスワードを指定します。このオプションが必要なのは、JARファイルに署名を付けるときだけです(JARファイルを検証するときは不要)。その場合、コマンド行で-storepassオプションを指定しないと、パスワードの入力を求められます。

修飾子envまたはfileが指定されていない場合、パスワードの値はargumentです。それ以外の場合、パスワードは次のように取得されます。

- env: argumentという名前の環境変数からパスワードを取得します。

- file: argumentという名前のファイルからパスワードを取得します。

注意:

テストを目的とする場合、またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。

-storetype storetype

インスタンスを生成するキーストアのタイプを指定します。デフォルトのキーストア・タイプは、セキュリティ・プロパティ・ファイル内のkeystore.typeプロパティの値で指定されたタイプです。この値は、java.security.KeyStoreのstatic getDefaultTypeメソッドで返されます。

-storepassオプションを使用してPCKS#11トークンのPINを指定することもできます。何も指定されない場合は、keytoolおよびjarsignerコマンドでトークンPINの入力を求められます。トークンに保護された認証パス(専用のPINパッドや生体読取り機など)がある場合、-protectedオプションを指定する必要がありますが、パスワード・オプションを指定する必要はありません。

-keypass [:env | :file] argument -certchain file

コマンド行で指定された別名に対応するキーストア・エントリの非公開鍵を保護するのに使うパスワードを指定します。jarsignerを使ってJARファイルに署名を付けるときは、パスワードが必要です。コマンド行でパスワードが指定されておらず、必要なパスワードがストアのパスワードと異なる場合は、パスワードの入力を求められます。

修飾子envまたはfileが指定されていない場合、パスワードの値はargumentです。それ以外の場合、パスワードは次のように取得されます。

- env: argumentという名前の環境変数からパスワードを取得します。

- file: argumentという名前のファイルからパスワードを取得します。

注意:

テストを目的とする場合、またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。

-certchain file

コマンド行で指定された別名で決まるキーストア・エントリの秘密鍵に関連付けられた証明書チェーンが完全でない場合に使用される証明書チェーンを指定します。このような状態になる可能性があるのは、キーストアがハードウェア・トークン上に格納されているが、そこには証明書チェーンの全体を保持するための十分な領域がない場合です。このファイルは連結された一連のX.509証明書か、PKCS#7形式の単一データ・ブロックのいずれかであり、そのエンコーディング形式はバイナリ・エンコーディング形式、インターネットRFC 1421証明書エンコーディング規格で規定される印刷可能エンコーディング形式(Base64エンコーディングとも呼ばれる)のいずれかです。

-sigfile file

.SFファイルと.DSAファイルの生成に使用するベース・ファイル名を指定します。たとえば、fileにDUKESIGNを指定すると、生成される.SFファイルと.DSAファイルの名前は、それぞれDUKESIGN.SFとDUKESIGN.DSAになります。これらのファイルは、署名付きJARファイルのMETA-INFディレクトリに置かれます。

fileに使用できる文字はa-zA-Z0-9_-です。文字、数字、アンダースコアおよびハイフンのみを使用できます。.SFおよび.DSAのファイル名では、小文字はすべて大文字に変換されます。

コマンド行で-sigfileオプションが出現しない場合、.SFファイルと.DSAファイルのベース・ファイル名は、コマンド行で指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に無効な文字が含まれている場合は、該当する文字をアンダースコア(_)に置き換えてファイル名が作成されます。

-signedjar file

署名付きJARファイルの名前を指定します。

-digestalg algorithm

JARファイルのエントリをダイジェストする際に使用するメッセージ・ダイジェスト・アルゴリズムの名前を指定します。

標準のメッセージ・ダイジェスト・アルゴリズム名のリストについては、『Java暗号化アーキテクチャ(JCA)リファレンス・ガイド』の付録A「標準名」を参照してください。

このオプションを指定しなかった場合、SHA256が使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、またはユーザーがそれを-providerClassオプションを使用して指定する必要があり、そうでない場合はコマンドが成功しません。

-sigalg algorithm

JARファイルの署名に使用する署名アルゴリズムの名前を指定します。

このアルゴリズムは、JARファイルの署名に使用する秘密鍵と互換性のあるものでなければなりません。このオプションを指定しなかった場合、秘密鍵と一致するデフォルトのアルゴリズムが使用されます(「サポートされるアルゴリズム」を参照)。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、または-providerClassオプションを使用してそれを指定する必要があり、そうでない場合はコマンドが成功しません。

標準の署名アルゴリズム名のリストについては、『Java暗号化アーキテクチャ(JCA)リファレンス・ガイド』の付録A「標準名」を参照してください。

-verify

署名付きJARファイルを検証します。

-verbose [:suboptions]

コマンド行で-verboseオプションが指定されている場合、どの程度の情報が表示されるかを決定するサブオプションを指定して署名または検証する際にjarsignerで冗長モードを使用するように指示します。これにより、jarsignerはJARの署名または検証の進行状況に関する追加情報を出力します。suboptionsは、all、grouped、summaryのいずれかです。

-certsオプションも指定した場合、デフォルト・モード(またはサブオプションall)では、エントリが処理されるたびにそのエントリが表示され、それに続いてJARファイルの各署名者の証明書情報が表示されます。

-certsと-verbose:groupedサブオプションを指定した場合、同じ署名者情報を持つエントリがグループ化され、その証明書情報とともに表示されます。

-certsと-verbose:summaryサブオプションを指定した場合、同じ署名者情報を持つエントリがグループ化され、その証明書情報とともに表示されます。

各エントリに関する詳細は、1つ(以上)のエントリとしてまとめて表示されます。「署名付きJARファイルの検証例」および「証明書情報を使用した検証例」を参照してください。

-certs

コマンド行で、-verifyおよび-verboseオプションとともに-certsオプションが指定されている場合は、JARファイルの各署名者の証明書情報も出力されます。この情報には、署名者の公開鍵を証明する証明書(.DSAファイルに格納)のタイプ名、および証明書がX.509証明書(java.security.cert.X509Certificateのインスタンス)である場合は、署名者の識別名が含まれています。

キーストアの確認も行われます。コマンド行でキーストアの値が指定されていない場合、デフォルトのキーストア・ファイルがあれば、検査されます。署名者の公開鍵の証明書がキーストア内のエントリと一致した場合は、その署名者のキーストア・エントリの別名がカッコ内に表示されます。

-tsa url

JARファイルの署名時にコマンド行に-tsa http://example.tsa.urlが表示される場合、署名のタイムスタンプが生成されます。URL http://example.tsa.urlは、TSA (Time Stamping Authority)の場所を特定し、-tsacertオプションで見つかったURLをオーバーライドします。-tsaオプションでは、TSAの公開鍵証明書がキーストアに配置されている必要はありません。

タイムスタンプを生成するために、jarsignerはRFC 3161で定義されているTSP (Time-Stamp Protocol)を使用してTSAと通信します。成功すると、TSAから返されたタイムスタンプ・トークンが署名ブロック・ファイルの署名とともに保存されます。

-tsacert alias

JARファイルの署名時にコマンド行に-tsacert aliasが表示される場合、署名のタイムスタンプが生成されます。aliasは、キーストア内の有効なTSAの公開鍵証明書を特定します。エントリの証明書で、TSAの場所を特定するURLを含むSubject Information Access拡張機能が確認されます。

-tsacertオプションを使用する場合は、TSAの公開鍵証明書がキーストアに配置されている必要があります。

-tsapolicyid policyid

TSAサーバーに送信されるポリシーIDを識別するオブジェクト識別子(OID)を指定します。このオプションを指定しなかった場合、ポリシーIDは送信されず、TSAサーバーではデフォルトのポリシーIDが選択されます。

オブジェクト識別子は、ITU電気通信標準化部門(ITU-T)の規格であるX.696で定義されます。一般に、これらの識別子は、1.2.3.4などの負ではない数字をピリオドで区切ったセットです。

—tsadigestalg algorithm

TSAサーバーに送信されるメッセージ・インプリントの生成に使用されるメッセージ・ダイジェスト・アルゴリズムを指定します。このオプションを指定しなかった場合は、SHA-256が使用されます。

「サポートされるアルゴリズム」を参照してください。標準のメッセージ・ダイジェスト・アルゴリズム名のリストについては、『Java暗号化アーキテクチャ(JCA)リファレンス・ガイド』の付録A「標準名」を参照してください。

-internalsf

以前は、JARファイルの署名時に生成された.DSA (署名ブロック)ファイルの中に、生成された.SFファイル(署名ファイル)の完全なコピーが符号化された形で含まれていました。この動作は変更されました。現在では、出力JARファイル全体のサイズを小さくするために、デフォルトでは.SFファイルのコピーが.DSAファイルに含まれないようになっています。コマンド行で-internalsfオプションを指定すると、以前と同じように動作します。このオプションは、テスト時に役立ちます。実際には、-internalsfオプションを使用するとオーバーヘッドが増加するため、使用しないでください。

-sectionsonly

コマンド行で-sectionsonlyオプションが指定されている場合、JARファイルの署名時に生成される.SFファイル(署名ファイル)には、マニフェスト・ファイル全体のハッシュを含むヘッダーは追加されません。このファイルに含まれるのは、JARファイル内の各ソース・ファイルに関する情報およびハッシュのみです。「署名ファイル」を参照してください。

デフォルトでは、最適化を行うために、このヘッダーが追加されます。ヘッダーが存在する場合は、JARファイルの検証時に、まずヘッダー内のハッシュがマニフェスト・ファイル全体のハッシュと一致するかどうかを確認できます。一致する場合、検証が次の手順に進みます。一致しない場合は、効率的には劣る方法を使用して検証を行います。具体的には、.SFファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致するかどうかを確認します。「JARファイルの検証」を参照してください。

-sectionsonlyオプションは、主にテスト時に使用されます。これを使用するとオーバーヘッドが増加するため、テスト以外では使用しないでください。

-protected

値には、trueまたはfalseを指定できます。専用PINリーダーなどの保護された認証パスを介してパスワードを指定する必要がある場合は、trueを指定します。

-providerName providerName

java.securityセキュリティ・プロパティ・ファイルに複数のプロバイダが構成された場合は、-providerNameオプションを使用して特定のプロバイダ・インスタンスを選択できます。このオプションの引数は、プロバイダの名前です。

Oracle PKCS #11プロバイダの場合、providerNameはSunPKCS11-TokenNameという形式になります(TokenNameはプロバイダ・インスタンスが構成された名前の接尾辞です。詳細は、構成属性の表を参照してください)。たとえば、次のコマンドでは、名前接尾辞SmartCardのPKCS #11キーストア・プロバイダ・インスタンスの内容を一覧表示します。

jarsigner -keystore NONE -storetype PKCS11
-providerName SunPKCS11-SmartCard
-list

-addprovider name[-providerArg arg]

名前(SunPKCS11など)でセキュリティ・プロバイダを追加する他、-addproviderのオプションの構成引数も追加します。

-providerClass provider-class-name[-providerArg arg]

暗号化サービス・プロバイダがjava.securityセキュリティ・プロパティ・ファイルに指定されていないときは、そのマスター・クラス・ファイルの名前を指定する場合に使用されます。完全修飾クラス名でセキュリティ・プロバイダを追加する他、-providerClassのオプションの構成引数も追加します。

-providerArg ConfigFilePathオプションを付けてkeytoolおよびjarsignerツールを使用すると、プロバイダが動的にインストールされ、トークン構成ファイルへのパスとしてConfigFilePathが使用されます。次の例では、セキュリティ・プロパティ・ファイル内でOracle PKCS #11プロバイダが構成されていない場合にPKCS #11キーストアをリストするコマンドを示します。

jarsigner -keystore NONE -storetype PKCS11
-providerClass sun.security.pkcs11.SunPKCS11
-providerArg /mydir1/mydir2/token.config
-list

-Jjavaoption

指定されたjavaoption文字列をJavaインタプリタに直接渡します。jarsignerコマンドは、インタプリタに対するラッパーです。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションを一覧表示するには、コマンド行でjava -hまたはjava -Xと入力してください。

-strict

署名または検証処理中に、コマンドから警告メッセージが発行される場合があります。このオプションを指定すると、このコマンドで見つかった重大な警告メッセージがツールの終了コードに反映されます。「エラーと警告」を参照してください。

-conf url

事前構成済のオプション・ファイルを指定します。

非推奨のオプション

次のjarsignerオプションは、JDK 9から非推奨となり、将来のJDKリリースでは削除される可能性があります。

-altsigner class

このオプションには、代替署名メカニズムを指定します。完全修飾クラス名は、com.sun.jarsigner.ContentSigner抽象クラスを拡張するクラス・ファイルを識別します。このクラス・ファイルへのパスは、-altsignerpathオプションによって定義されます。-altsignerオプションが使用されている場合、jarsignerコマンドは指定されたクラスが提供する署名メカニズムを使用します。それ以外の場合、jarsignerコマンドはデフォルトの署名メカニズムを使用します。

たとえば、com.sun.sun.jarsigner.AuthSignerというクラスが提供する署名メカニズムを使用するには、jarsignerの-altsigner com.sun.jarsigner.AuthSignerオプションを使用します。

-altsignerpath classpathlist

クラス・ファイルおよびそれに依存するJARファイルへのパスを指定します。クラス・ファイル名は、-altsignerオプションで指定します。クラス・ファイルがJARファイル内にある場合、このオプションではそのJARファイルへのパスが指定されます。

絶対パスまたは現在のディレクトリからの相対パスを指定できます。classpathlistに複数のパスまたはJARファイルを含める場合、次を使用して区切ります。

- Oracle Solaris、LinuxおよびmacOSの場合: コロン(:)

- Windowsの場合: セミコロン(;)

目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。

次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名が含まれています。

-altsignerpath /home/user/lib/authsigner.jar

次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名は省略されています。

-altsignerpath /home/user/classes/com/sun/tools/jarsigner/

エラーと警告

署名または検証処理中に、jarsignerコマンドから様々なエラーや警告が発行される場合があります。

エラーが発生した場合、jarsignerコマンドはコード1で終了します。エラーは発生していないが、1つ以上の重大な警告が発生した場合は、-strictオプションが指定されていなければ、jarsignerコマンドはコード0で終了し、-strictが指定されていれば、警告コードのOR値で終了します。情報警告のみが発生した場合や警告がまったく発生しない場合、コマンドは常にコード0で終了します。

たとえば、エントリの署名に使用される証明書の有効期限が切れていて、その証明書のkeyUsage拡張機能でファイルの署名が許可されていない場合は、-strictオプションが指定されていれば、jarsignerコマンドはコード12 (=4+8)で終了します。

注意: Oracle Solaris、LinuxおよびOS Xでは0から255までの値のみが有効のため、終了コードは再利用されます。

次のセクションでは、jarsignerコマンドが発行できるエラーおよび警告の名前、コードおよび説明を示します。

失敗

jarsignerコマンドに失敗する原因として、コマンド行の解析エラー、JARファイルに署名する鍵ペアが見つからないこと、署名付きJARの検証の失敗などが考えられますが、それだけにかぎりません。

失敗

コード1。署名または検証に失敗しました。

重大な警告

注意:

-strictオプションを指定した場合、重大な警告はエラーとして報告されます。

jarsignerコマンドで重大な警告が発行される原因として、JARファイルの署名に使用される証明書でエラーが発生したことや、署名付きJARファイルでその他の問題が発生したことが考えられます。

hasExpiredCert

コード4。このJARには、署名者の証明書の有効期限が切れているエントリが含まれています。

notYetValidCert

コード4。このJARには、署名者の証明書がまだ有効になっていないエントリが含まれています。

chainNotValidated

コード4。このJARには、証明書チェーンが検証されていないエントリが含まれています。

signerSelfSigned

コード4。このJARには、署名者の証明書が自身で署名されているエントリが含まれています。

weakAlg

コード4。コマンド行で指定されたアルゴリズムがセキュリティ・リスクと見なされます。

badKeyUsage

コード8。このJARには、署名者の証明書のKeyUsage拡張機能でコードの署名が許可されていないエントリが含まれています。

badExtendedKeyUsage

コード8。このJARには、署名者の証明書のExtendedKeyUsage拡張機能でコードの署名が許可されていないエントリが含まれています。

badNetscapeCertType

コード8。このJARには、署名者の証明書のNetscapeCertType拡張機能でコードの署名が許可されていないエントリが含まれています。

hasUnsignedEntry

コード16。このJARには、整合性チェックが行われていない未署名のエントリが含まれています。

notSignedByAlias

コード32。このJARには、指定した別名(複数可)で署名されていない署名済エントリが含まれています。

aliasNotInStore

コード32。このJARには、このキーストア内の別名で署名されていない署名済エントリが含まれています。

情報警告

情報警告には、エラーではないが、不適切と見なされるものが含まれます。コードはありません。

hasExpiringCert

このJARには、署名者の証明書の有効期限が6か月以内に切れるエントリが含まれています。

noTimestamp

このJARには、タイムスタンプがない署名が含まれています。タイムスタンプがないと、署名者の証明書の有効期限日(YYYY-MM-DD)後や今後の失効日後に、このJARファイルをユーザーが検証できない可能性があります。

JARファイルの署名例

キーストアの別名がworkingディレクトリにあるmystoreという名前のキーストア内のjaneであるユーザーの秘密鍵を使用してbundle.jarに署名し、署名付きのJARファイルにsbundle.jarという名前を付けるには、次のコマンドを使用します。

jarsigner -keystore /working/mystore
-storepass <keystore password>
-keypass <private key password>
-signedjar sbundle.jar bundle.jar jane

上のコマンドでは-sigfileが指定されていないため、署名付きJARファイルに格納されるように生成された.SFファイルと.DSAファイルのデフォルト名は、別名に基づいて付けられます。JANE.SFとJANE.DSAという名前が付けられます。

ストアのパスワードおよび秘密鍵のパスワードを求めるようにする場合は、上のコマンドを次のように短縮します。

jarsigner -keystore /working/mystore
-signedjar sbundle.jar bundle.jar jane

keystoreがデフォルトのkeystore(ホーム・ディレクトリ内の.keystore)である場合は、次に示すように、キーストアを指定する必要がありません。

jarsigner -signedjar sbundle.jar bundle.jar jane

署名付きJARファイルで入力JARファイル(bundle.jar)を上書きする場合は、次に示すように、-signedjarオプションを指定する必要がありません。

jarsigner bundle.jar jane

署名付きJARファイルの検証例

署名付きJARファイルを検証して、署名が有効であり、JARファイルが改ざんされていないことを確認するには、次のようなコマンドを使用します。

jarsigner -verify sbundle.jar

検証に成功すると、jar verifiedと表示されます。そうでない場合は、エラー・メッセージが表示されます。-verboseオプションを使用すると、より多くの情報を取得できます。-verboseオプションを指定したjarsignerの使用例を次に示します。

jarsigner -verify -verbose sbundle.jar

198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF
199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF
1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA
smk   2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class
smk    849 Fri Sep 26 16:12:46 PDT 1997 test.class

s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore

jar verified.

証明書情報を使用した検証例

-verifyおよび-verboseオプションとともに-certsオプションが指定されている場合は、JARファイルの各署名者の証明書情報も出力されます。次の例で示すように、この情報には、証明書のタイプ、署名者の識別名情報(X.509証明書の場合)、およびカッコで囲まれた署名者のキーストア別名(JARファイルの公開鍵の証明書がキーストア・エントリの公開鍵の証明書と一致する場合)が含まれます。

jarsigner -keystore /working/mystore -verify -verbose -certs myTest.jar

198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF
199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF
1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA
208 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.SF
1087 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.DSA
smk   2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class

X.509, CN=Test Group, OU=Java Software, O=Oracle, L=CUP, S=CA, C=US (javatest)
X.509, CN=Jane Smith, OU=Java Software, O=Oracle, L=cup, S=ca, C=us (jane)

s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore

jar verified.

署名者の証明書がX.509証明書でない場合は、識別名情報は表示されません。その場合には、証明書のタイプと別名だけが表示されます。たとえば、証明書がPGP証明書で、別名がbobの場合は、PGP, (bob)と表示されます。

policytool

policytoolは、ユーティリティGUI経由で取得したユーザー入力に基づいた、プレーン・テキストのポリシー・ファイルの読取りおよび書込みに使用します。

注意:

policytoolツールは、JDK 9では非推奨となり、次のJDKのメジャー・リリースでは削除される可能性があります。

形式

policytool [ -file ] [ filename ]

-file

ポリシー・ファイルをロードするようにpolicytoolコマンドに指示します。

filename

ロードされるファイルの名前。

説明

policytoolコマンドは、システム管理者がローカル・ポリシー・ファイルの内容を管理するための管理者用GUIを呼び出します。ポリシー・ファイルは.policyを拡張子に持つプレーン・テキスト・ファイルであり、ドメイン別のリモート要求者をアクセス権オブジェクトにマッピングします。詳細は、デフォルトのPolicyの実装とポリシー・ファイルの構文に関する項を参照してください。

例

ポリシー・ツール管理者ユーティリティを実行するには、次のコマンドを使用します。

policytool

policytoolコマンドを実行して指定されたファイルをロードするには、次のコマンド行を使用します。

policytool -file mypolicyfile

kinit

kinitツールとそのオプションは、Kerberosチケット認可チケットを取得およびキャッシュする場合に使用します。

このツールの機能は、SEAMやMITリファレンス実装など、他のKerberos実装に一般的に見られるkinitツールと類似しています。kinitを実行する前に、Key Distribution Center (KDC)を使用してユーザーをプリンシパルとして登録する必要があります。

形式

初期チケットのリクエスト:

kinit [-A] [-f] [-p] [-c cache_name] [-l lifetime] [-r renewable_time] [[-k [-t keytab_file_name]] [principal] [password]

チケットの更新:

kinit -R [-c cachename] [principal]

説明

Windowsではデフォルトで、USER_HOME\krb5cc_USER_NAMEというキャッシュ・ファイルが生成されます。

USER_HOMEは、java.lang.Systemプロパティuser.homeから取得されます。USER_NAMEは、java.lang.Systemプロパティuser.nameから取得されます。USER_HOMEがnullの場合、キャッシュ・ファイルはプログラムが実行されている現在のディレクトリに格納されます。USER_NAMEは、オペレーティング・システムのログイン・ユーザー名です。このユーザー名は、ユーザーのプリンシパル名と別の名前にすることもできます。たとえばWindowsでは、キャッシュ・ファイルはC:\Windows\Users\duke\krb5cc_dukeのようになります。この場合、dukeはUSER_NAMEであり、C:\Windows\Users\dukeはUSER_HOMEです。

デフォルトでは、キー・タブ名は、Kerberos設定ファイルから取得されます。Kerberos構成ファイルでキータブ名が指定されていない場合、kinitツールではUSER_HOME\krb5.keytabという名前であるとみなされます。

コマンド行でpasswordオプションを使用するときにパスワードを指定しない場合、kinitツールからパスワードの入力を要求されます。

注意:

passwordオプションは、テスト目的でのみ用意されています。スクリプトにパスワードを指定したり、コマンド行にパスワードを入力したりしないでください。このようにした場合、パスワードが漏洩する危険性があります。

コマンド

次のいずれかのコマンドを指定できます。コマンドの後にオプションを指定します。

-A

アドレスを含めません。

-f

転送可能チケットを発行します。

-p

プロキシ化可能チケットを発行します。

-c cache_name

キャッシュ名(例: FILE:D:\temp\mykrb5cc)です。

-l lifetime

チケットの存続期間を設定します。

-r renewable_time

チケットを更新できる合計存続期間を設定します。

-R

チケットを更新します。

-k

キータブを使用します。

-t keytab_filename

キータブ名(例: d:\winnt\profiles\duke\krb5.keytab)です。

principal

プリンシパル名(例: duke@example.com)です。

password

プリンシパルのKerberosパスワード。これは、コマンド行またはスクリプトに指定しないでください。

-help

説明を表示する。

例

デフォルト・サービスについて、現在のクライアント・ホストから認証に対して有効な資格を要求し、デフォルトの場所(C:\Windows\Users\duke\krb5cc_duke)に資格キャッシュを格納します。

kinit duke@example.com

異なるプリンシパルごとにプロキシ化可能な資格証明を要求し、指定されたファイル・キャッシュにこれらの資格証明を格納します。

kinit -p -c FILE:C:\Windows\Users\duke\credentials\krb5cc_cafebeef
cafebeef@example.com

異なるプリンシパルごとにプロキシ化可能および転送可能な資格証明を要求し、指定されたファイル・キャッシュにこれらの資格証明を格納します。

kinit -f -p -c FILE:C:\Windows\Users\duke\credentials\krb5cc_cafebeef
cafebeef@example.com

kinitツールのヘルプ・メニューを表示します。

kinit -help

klist

klistツールは、ローカルの資格キャッシュおよびキー表のエントリを表示する場合に使用します。ktabツールを使用すると、ローカルの資格キャッシュおよびキー表のエントリを表示できます。

形式

klist [ [-c] [-f] [-e] [-a [-n]] ] [-k [-t] [-K] ] [name] [-help]]

説明

klistツールは、ローカルの資格キャッシュおよびキー表のエントリを表示します。kinitツールを使用して資格キャッシュを変更した後や、ktabツールを使用してキータブを変更した後は、klistツールを使用して資格キャッシュまたはキータブの内容を表示することが、変更内容を確認する唯一の方法です。klistツールでは、Kerberosデータベースは変更されません。

コマンド

-c

リストされる資格キャッシュを指定します。

資格キャッシュ・エントリ用のオプションは次のとおりです。

-f

資格フラグを表示します。

-e

暗号化の種類を表示します。

-a

アドレスを表示します。

-n

-aオプションが指定されている場合は、アドレスを逆引き解決しないでください。

-k
リストされるキータブを指定します。

キータブのエントリを一覧表示します。キータブ・エントリ用のオプションは次のとおりです。

-t

キータブ・エントリのタイムスタンプを表示します。

-K

キータブ・エントリのDES鍵を表示します。

-e

キータブ・エントリの鍵タイプを表示します。

name
資格キャッシュ名またはキー・タブ名を指定する。ファイルベースのキャッシュまたはキータブの接頭辞はFILE:です。名前を指定しなかった場合、klistツールでは、キャッシュ名およびキータブのデフォルト値が使用されます。これらのデフォルト値は、kinitのドキュメントに一覧表示されています。

-help
説明を表示する。

例

キー・タブ・エントリのタイムスタンプとDESキーを含めて、キー表内のエントリを一覧表示する場合

klist -k -t -K FILE:\temp\mykrb5cc

資格フラグとアドレス・リストを含めて、資格キャッシュのエントリを一覧表示する場合

klist -c -f FILE:\temp\mykrb5cc

ktab

ktabツールは、ローカルのキー表に格納されたプリンシパル名とサービス鍵を管理する場合に使用します。

形式

ktab commands options

commands options

キータブ名およびエントリのリスト、キータブへの新しいキー・エントリの追加、既存のキー・エントリの削除、説明の表示を行います。「コマンドとオプション」を参照しくてださい。

説明

ktabを使用すると、ローカルのキー表に格納されたプリンシパル名とサービス鍵を管理できます。キータブに一覧表示されたプリンシパルと鍵のペアを使用すると、ホスト上で実行されているサービスをKey Distribution Center (KDC)に認証させることができます。

Kerberosを使用するようにサーバーを構成するには、サーバーを実行しているホスト上でキータブを設定する必要があります。ktabツールを使用してキータブを更新しても、Kerberosデータベースは影響を受けません。

キータブは、ホスト自身の鍵リストをコピーしたものです。鍵リストはユーザーのパスワードに類似しています。Key Distribution Center (KDC)に認証してもらう必要のあるアプリケーション・サーバーでは、サーバー自身のプリンシパルと鍵が記述されたキータブが必要になります。キー・タブ内の鍵を変更した場合、Kerberosデータベースにも同様の変更を加えなければなりません。ktabツールを使用すると、キー表内のプリンシパル名とキーのペアを一覧表示、追加、更新または削除できます。どの操作を行っても、Kerberosデータベースには影響しません。

セキュリティ上の注意

コマンド行にパスワードを指定しないでください。そのようにすると、セキュリティ・リスクが生じる可能性があります。たとえば、UNIXのpsコマンドを実行しているときに、攻撃者にパスワードを発見される可能性があります。

ユーザーにとって自身のパスワードの保護が重要であるように、ホストにとって自身のキー・タブの保護が重要になります。キータブ・ファイルは、必ずローカル・ディスクに格納し、root以外には読み取れないようにする必要があります。キータブ・ファイルを平文のままネットワークで送信しないでください。

コマンドとオプション

-l [-e] [-t]

キータブ名とエントリをリストします。-eを指定すると、各エントリの暗号化の種類が表示されます。-tを指定すると、各エントリのタイムスタンプが表示されます。

-a principal_name [password] [-n kvno] [-append]

オプションのpasswordとともに指定されたプリンシパル名のキータブに新しいキー・エントリを追加します。kvnoが指定されている場合、新しい鍵のキー・バージョン番号はその値と等価で、それ以外の場合は自動的にキー・バージョン番号の値が増えます。-appendが指定されている場合、新しい鍵がキータブの最後に追加され、それ以外の場合は、同じプリンシパルの古いキーが削除されます。

Kerberosデータベースは変更されない。コマンド行またはスクリプトにパスワードを指定しないでください。このツールでは、パスワードが指定されていない場合、パスワードの入力を求められます。

-d principal_name [—f] [-e etype] [kvno | all| old]

指定されたプリンシパルのキータブからキー・エントリを削除します。Kerberosデータベースは変更されない。

- kvnoが指定されている場合、キー・バージョン番号がkvnoと一致する鍵を削除します。allが指定されている場合、すべての鍵を削除します。

- oldが指定されている場合、最も高いkvno値を持つ鍵を除いたすべての鍵を削除します。デフォルトのアクションはallです。

- etypeが指定されている場合、この暗号化の種類の鍵のみを削除します。etypeはRFC 3961のセクション8で定義されている数値etypeで指定する必要があります。-fを指定しないかぎり、削除を確認するためのプロンプトが表示されます。

etypeを指定すると、この暗号化の種類に一致するエントリのみが削除されます。それ以外の場合は、すべてのエントリが削除される。

-help

説明を表示する。

一般オプション

このオプションは、-l、-aまたは-dコマンドと一緒に使用できます。

-k keytab name

FILE:接頭辞を使用してキータブ名とパスを指定します。

例

デフォルトのキー表内のエントリをすべてリストします

ktab -l

キー表に新しいプリンシパルを追加します(パスワードの入力を求められることに注意してください)

ktab -a duke@example.com

キー表からプリンシパルを削除します

ktab -d duke@example.com

5 Remote Method Invocation (RMI)のツールおよびコマンド

RMIのツールおよびコマンドは、Web経由でまたは別のネットワークを使用して対話するアプリケーションを作成するのに使用します。

次の各項では、RMIのツールおよびコマンドについて説明します。

- rmic: rmicコンパイラは、Java Remote Method Protocol (JRMP)を使用したスタブおよびスケルトン・クラス・ファイルを生成する場合や、リモート・オブジェクト用のスタブおよびtieクラス・ファイル(IIOPプロトコル)を生成する場合に使用します。

- rmiregistry: rmiregistryコマンドは、現在のホストの指定されたポート上でリモート・オブジェクト・レジストリを作成して開始する場合に使用します。

- rmid: rmidコマンドは、オブジェクトをJava仮想マシン(JVM)に登録して起動できるようにする、起動システム・デーモンを開始する場合に使用します。

- serialver: serialverコマンドは、1つ以上のクラスのserialVersionUIDを、展開しているクラスにコピーするのに適した形式で返す場合に使用します。

rmic

rmicコンパイラは、Java Remote Method Protocol (JRMP)を使用したスタブおよびスケルトン・クラス・ファイルを生成する場合や、リモート・オブジェクト用のスタブおよびtieクラス・ファイル(IIOPプロトコル)を生成する場合に使用します。rmicコンパイラは、Object Management Group (OMG)のインタフェース定義言語(IDL)を生成します。

形式

rmic [ options ] package-qualified-class-names

options

これは、rmicコンパイラのコマンド行オプションです。「rmicコンパイラのオプション」を参照してください。

package-qualified-class-names

パッケージを含むクラス名(例: java.awt.Color)です。

説明

非推奨に関する注: Java Remote Method Protocol (JRMP)のスタブおよびスケルトンの静的な生成のサポートは、非推奨になりました。その代わりに、動的に生成されたJRMPスタブを使用することをお薦めします。これにより、このツールをJRMPベースのアプリケーションで使用する必要がなくなります。

rmicコンパイラではJRMPを使用するスタブおよびスケルトン・クラス・ファイルと、リモート・オブジェクト用のスタブおよびTieクラス・ファイル(IIOPプロトコル)が生成されます。リモート・オブジェクトの実装クラスであるこれらのクラス・ファイルは、Javaプログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、java.rmi.Remoteインタフェースを実装するクラスです。rmicコマンドでのクラス名は、そのクラスがjavacコマンドで正常にコンパイルされていて、かつパッケージ名が完全修飾されている必要があります。たとえば、ここで示すように、クラス・ファイル名HelloImplでrmicコマンドを実行すると、クラスのパッケージ名が付いたhelloサブディレクトリにHelloImpl_Stub.classファイルが作成されます。

rmic hello.HelloImpl

リモート・オブジェクト用のスケルトンは、リモート・オブジェクト実装の呼出しをディスパッチするメソッドを含むJRMPプロトコル・サーバー側のエンティティです。

リモート・オブジェクト用のTieは、スケルトンと同様にサーバー側のエンティティですが、IIOPプロトコルを使用してクライアントと通信します。

スタブは、リモート・オブジェクト用のクライアント側プロキシで、リモート・オブジェクトでのメソッド呼出しを、実際のリモート・オブジェクト実装が存在するサーバーと通信する役割を持っています。したがって、クライアントによるリモート・オブジェクトへの参照は、実際はローカル・スタブへの参照となります。

デフォルトでは、rmicコマンドは、-v1.2オプションが指定されている場合と同様に、1.2 JRMPスタブ・プロトコル・バージョンのみを使用するスタブ・クラスを生成します。「rmicコンパイラのオプション」を参照してください。

スタブはリモート・インタフェースのみを実装し、リモート・オブジェクトが実装するローカル・インタフェースは実装しません。JRMPスタブはリモート・オブジェクトと同じリモート・インタフェースを実装するため、クライアントは、キャストや型チェックにJavaプログラミング言語に組み込まれた演算子を使用できます。IIOPの場合は、PortableRemoteObject.narrowメソッドを使わなければなりません。

rmicコンパイラのオプション

-bootclasspath path

ブートストラップ・クラス・ファイルの場所をオーバーライドします。

-classpath path

rmicコマンドがクラスを探すために使用するパスを指定します。このオプションを設定すると、デフォルトやCLASSPATH環境変数がオーバーライドされます。オペレーティング・システムに応じて、ディレクトリはコロンまたはセミコロンで区切られます。pathの一般的な形式を次に示します。

- Oracle Solaris、LinuxおよびOS X: .:your_path。例: .:/usr/local/java/classes

- Windows: .;your_path。例: .;/usr/local/java/classes

-d directory

生成されたクラス階層の出力先ディレクトリのルートを指定します。このオプションを使えば、スタブ、スケルトン、およびTieファイルを格納するディレクトリを指定できます。

- Oracle Solaris、LinuxおよびOS X: たとえば、次のコマンドは、MyClassから導出されたスタブおよびスケルトン・クラスを/java/classes/exampleclassディレクトリに配置します。

rmic -d /java/classes exampleclass.MyClass

- Windows: たとえば、次のコマンドは、MyClassから導出されたスタブおよびスケルトン・クラスをC:\java\classes\exampleclassディレクトリに配置します。

rmic -d C:\java\classes exampleclass.MyClass

-dオプションが指定されていない場合、デフォルトの動作は、-dが指定された場合と同様です。ターゲット・クラスのパッケージ階層が現在のディレクトリに作成され、スタブ、Tieおよびスケルトン・ファイルがそのディレクトリに配置されます。

-g

ローカル変数を含むすべてのデバッグ情報を生成できます。デフォルトでは、行番号情報だけが生成されます。

-idl

rmicコマンドによって、指定したクラスおよび参照されたクラスのOMG IDLが生成されます。IDLでは、プログラミング言語に依存せずに、宣言するだけでオブジェクトのAPIを指定できます。IDLは、メソッドおよびデータの仕様として使用します。CORBAバインディングを提供する任意の言語で、メソッドおよびデータの作成および呼出しを行うことができます。これらの言語には、JavaおよびC++が含まれています。

-idlオプションを使用されるときは、ほかのオプションも含まれます。

- -alwaysまたは-alwaysgenerateオプションは、既存のスタブ、TieまたはIDLが入力クラスより新しいときでも強制的に再生成します。

- -factoryオプションでは、生成されたIDLでfactoryキーワードが使用されます。

- -idlModule fromJavaPackage[.class] toIDLModuleは、IDLEntityパッケージのマッピングを指定します(例: -idlModule my.module my::real::idlmod)。

- -idlFile fromJavaPackage[.class] toIDLFileは、IDLEntityファイルのマッピング(例: -idlFile test.pkg.X TEST16.idl)を指定します。

-iiop

rmicコマンドを使用すると、JRMPのスタブとスケルトン・クラスの代わりに、IIOPのスタブとTieクラスが生成されます。スタブ・クラスは、リモート・オブジェクト用のローカル・プロキシで、クライアントからサーバーに呼出しを送信するときに使用されます。各リモート・インタフェースにはスタブ・クラスが必要です。スタブ・クラスによってリモート・インタフェースが実装されます。クライアントによるリモート・オブジェクトへの参照は、スタブへの参照です。Tieクラスは、着信呼出しを処理するためにサーバー側で用いられ、それらの呼出しをしかるべき実装クラスにディスパッチします。各実装クラスには、Tieクラスが必要です。

-iiopを指定してrmicコマンドを呼び出すと、次の命名規約に準拠したスタブとTieが生成されます。

_implementationName_stub.class
_interfaceName_tie.class

-iiopオプションを使用するときは、他のオプションも含まれます。

- -alwaysまたは-alwaysgenerateオプションは、既存のスタブ、TieまたはIDLが入力クラスより新しいときでも強制的に再生成します。

- -nolocalstubsオプションでは、同じプロセスのクライアントとサーバー用に最適化されたスタブが作成されません。

- -noValueMethodsオプションは、-idlオプションと一緒に使用する必要があります。-noValueMethodsオプションでは、発行されたIDLにvaluetypeメソッドおよび初期化子が追加されません。これらのメソッドおよび初期化子は、valuetypeのオプションであり、-idlオプションと一緒に-noValueMethodsオプションを指定しないかぎり生成されます。

- -poaオプションでは、継承がorg.omg.CORBA_2_3.portable.ObjectImplからorg.omg.PortableServer.Servantに変更されます。Portable Object Adapter (POA)のPortableServerモジュールには、ネイティブServant型を定義します。Javaプログラミング言語では、Servant型がJava org.omg.PortableServer.Servantクラスにマッピングされます。このクラスは、すべてのPOAサーバント実装の基底クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッドおよびPOAによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。この動作は、OMG IDL to Java Language Mapping Specification, CORBA V 2.3.1 ptc/00-01-08.pdfに準拠しています。

-Jargument

-Jオプションを任意のJavaコマンドと組み合せて使用すると、後に続くargument (-Jと引数の間に空白を入れない)がJavaインタプリタに渡されます。

-keepまたは-keepgenerated

スタブ、スケルトンおよびTieクラス用に生成された.javaソース・ファイルを保持し、.classファイルと同じディレクトリに書き込みます。

-nowarn

警告をオフにします。-nowarnオプションを使用すると、コンパイラは警告を出力しません。

-nowrite

コンパイル済のクラスをファイル・システムに書き込みません。

-vcompat (非推奨)

1.1と1.2の両方のJRMPスタブ・プロトコル・バージョンと互換性のあるスタブおよびスケルトン・クラスを生成します。5.0よりも前のリリースでは、このオプションがデフォルトでした。生成されたスタブ・クラスは、JDK 1.1仮想マシンにロードされると1.1スタブ・プロトコル・バージョンを使用し、JDK 1.2以降の仮想マシンにロードされると1.2スタブ・プロトコル・バージョンを使用します。生成されたスケルトン・クラスでは、1.1と1.2の両方のスタブ・プロトコル・バージョンをサポートします。生成されたクラスは両方の操作モードをサポートするために、サイズが大きくなります。注: このオプションは非推奨になりました。「説明」を参照してください。

-verbose

コンパイラやリンカーが、コンパイルされているクラスやロードされているクラス・ファイルについてのメッセージを表示するようにします。

-v1.1 (非推奨)

1.1 JRMPスタブ・プロトコル・バージョンのみのスタブおよびスケルトン・クラスを生成します。-v1.1オプションが役立つのは、JDK 1.1からrmicコマンドで生成され、アップグレードできない(さらに動的なクラス・ローディングを使用していない)既存の静的にデプロイされたスタブ・クラスと直列化互換性のあるスタブ・クラスを生成する場合のみです。注: このオプションは非推奨になりました。「説明」を参照してください。

-v1.2 (非推奨)

(デフォルト) 1.2 JRMPスタブ・プロトコル・バージョンのみのスタブ・クラスを生成します。スケルトン・クラスは1.2スタブ・プロトコル・バージョンで使用されないため、スケルトン・クラスは生成されません。生成されたスタブ・クラスは、JDK 1.1仮想マシンにロードされても動作しません。注: このオプションは非推奨になりました。「説明」を参照してください。

環境変数

CLASSPATH

ユーザー定義クラスへのパスをシステムに指定します。

- Oracle Solaris、Linux、OS X: ディレクトリはコロンで区切られます(例: .:/usr/local/java/classes)。

- Windows: ディレクトリはセミコロンで区切られます(例: .;C:\usr\local\java\classes)。

rmiregistry

rmiregistryコマンドは、現在のホストの指定されたポート上でリモート・オブジェクト・レジストリを作成して開始する場合に使用します。

形式

rmiregistry options port

options

これは、rmiregistryコマンドのオプションです。「オプション」を参照してください

port

リモート・オブジェクト・レジストリを開始する現在のホストのportの番号。

説明

rmiregistryコマンドは、現在のホストの指定したポート上にリモート・オブジェクト・レジストリを作成し、開始します。ポートを省略した場合は、ポート1099上でレジストリが開始されます。rmiregistryコマンドからは何も出力されません。通常は、次のようにバックグラウンドで実行されます。

rmiregistry &

リモート・オブジェクト・レジストリは、ブートストラップのネーム・サービスで、同一ホスト上のRMIサーバーでリモート・オブジェクトを名前にバインドするために使用されます。その後、ローカルおよびリモート・ホスト上のクライアントはリモート・オブジェクトを検索し、リモート・メソッドの呼出しを行うことができます。

通常、レジストリは最初のリモート・オブジェクトの位置を指定するために使用され、アプリケーションはそのオブジェクトのメソッドを呼び出す必要があります。その後、そのオブジェクトは他のオブジェクトを探すためのアプリケーション固有のサポートを提供します。

java.rmi.registry.LocateRegistryクラスのメソッドは、ローカル・ホスト、またはローカル・ホストとポートで動作するレジストリを取得するために使用されます。

java.rmi.NamingクラスのURLベースのメソッドは、レジストリで動作し、次の目的で使用できます。

- 指定された名前をリモート・オブジェクトにバインドするため

- レジストリ内のバインドされている名前の配列を返すため

- 指定された名前に関連付けられたリモート・オブジェクトの参照(スタブ)を返すため

- 指定された名前を新しいリモート・オブジェクトにバインドし直しすため

- リモート・オブジェクトに関連付けられた指定の名前に対するバインディングを破棄するため

オプション

-Joption

任意のJavaオプションとともに使用すると、-Jの後に続くoption (-Jとオプションの間に空白を入れない)がJavaインタプリタに渡されます。

rmid

rmidコマンドは、オブジェクトをJava仮想マシン(JVM)に登録して起動できるようにする、起動システム・デーモンを開始する場合に使用します。

形式

rmid [options]

options

これは、rmidコマンドのコマンド行オプションです。「rmidのオプション」を参照してください。

説明

rmidコマンドは、起動システム・デーモンを開始します。起動システム・デーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、JVM内で起動することができません。

次のように、rmidコマンドを実行し、セキュリティ・ポリシー・ファイルを指定して、デーモンを開始します。

rmid -J-Djava.security.policy=rmid.policy
rmidコマンドのOracleの実装を実行する場合、デフォルトでは、起動グループ用にJVMを開始する際に各ActivationGroupDesc内の情報を使用できるかどうかをrmidコマンドが検証できるように、セキュリティ・ポリシー・ファイルを指定する必要があります。特に、ActivationGroupDescコンストラクタに渡されるCommandEnvironmentや任意のプロパティによって指定されるコマンドおよびオプションは、rmidコマンドのセキュリティ・ポリシー・ファイルで明示的に許可されることが必要になりました。sun.rmi.activation.execPolicyプロパティの値によって、起動グループ用にJVMを開始する際にActivationGroupDesc内の情報を使用できるかどうかを判断するときにrmidコマンドが使用するポリシーが決定されます。詳細は、-J-Dsun.rmi.activation.execPolicy=policyオプションの説明を参照してください。

rmidコマンドを実行すると、アクティベータおよび内部レジストリがデフォルト・ポート1098で開始され、この内部レジストリ内でActivationSystemがjava.rmi.activation.ActivationSystemという名前にバインドされます。

レジストリに代替のポートを指定するには、rmidコマンドを実行するときに-portオプションを指定する必要があります。たとえば、次のコマンドは、起動システム・デーモンおよびレジストリをレジストリのデフォルト・ポート1099で開始します。

rmid -J-Djava.security.policy=rmid.policy -port 1099

必要に応じたRMIDの開始(Oracle SolarisおよびLinuxのみ)

rmidをコマンド行から開始するには、inetd (Oracle Solarisの場合)、またはxinetd (Linux)を構成してrmidを必要に応じて開始する方法もあります。

RMIDを開始すると、System.inheritedChannelメソッドを呼び出して、継承されたチャネル(inetd/xinetdから継承)を取得しようとします。継承されたチャネルがnullであるか、java.nio.channels.ServerSocketChannelのインスタンスでない場合、RMIDはそのチャネルがinetd/xinetdによって開始されたものではないと見なし、前述のように開始します。

継承されたチャネルがServerSocketChannelインスタンスである場合、RMIDは、自分がエクスポートするリモート・オブジェクト(java.rmi.activation.ActivationSystemがバインドされているレジストリとjava.rmi.activation.Activatorリモート・オブジェクト)に対する要求を受信するサーバー・ソケットとして、ServerSocketChannelから取得したjava.net.ServerSocketを使用します。このモードでは、RMIDの動作は、次の場合を除いて、コマンド行から開始した場合と同じです。

- System.errに対する出力は、ファイルにリダイレクトされます。このファイルはjava.io.tmpdirシステム・プロパティで指定されるディレクトリ(通常は/var/tmpまたは/tmp)にあります。ファイル名の接頭辞はrmid-errで、接尾辞はtmpです。

- -portオプションは使用できません。このオプションを指定した場合、RMIDはエラー・メッセージを出して終了します。

- -logオプションは必須である。このオプションを指定しなかった場合、RMIDはエラー・メッセージを出して終了します。

rmidのオプション

-C option

rmidコマンドの子プロセス(起動グループ)が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システム・デーモンによって生成される各仮想マシンにプロパティを渡すことができます。

rmid -C-Dsome.property=value

コマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のコマンドを使用すると、すべての子JVMでサーバー呼出しのロギングが可能になります。

rmid -C-Djava.rmi.server.logCalls=true

-J option

RMIDコマンドを実行しているJavaインタプリタに渡されるオプションを指定します。たとえば、rmidコマンドがrmid.policyという名前のポリシー・ファイルを使用するように指定するには、rmidのコマンド行で-Jオプションを使用して、java.security.policyプロパティを定義します。次に例を示します。

rmid -J-Djava.security.policy-rmid.policy

-J-Dsun.rmi.activation.execPolicy=policy

起動グループが実行されることになるJVMの起動に使用されるコマンドおよびコマンド行オプションをチェックするために、RMIDコマンドが採用するポリシーを指定します。このオプションは、Java RMI起動デーモンのOracleの実装のみに存在します。コマンド行にこのプロパティを指定しない場合、結果は-J-Dsun.rmi.activation.execPolicy=defaultを指定した場合と同じになります。

policyに指定可能な値は、default、policyClassNameまたはnoneです。

- default
execPolicyの値がdefaultまたは指定されていない場合、rmidコマンドが使用するセキュリティ・ポリシー・ファイル内のコマンドおよびオプションを実行するためのアクセス権がrmidコマンドに付与されているときにのみ、rmidコマンドは特定のコマンド行オプションを付けてコマンドを実行できます。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装のみです。

rmidコマンドは、起動グループの登録済起動グループ記述子であるActivationGroupDesc内の情報を使用して、そのグループ用のJVMを起動します。グループ記述子は、起動グループを開始する際に実行するコマンドと、そのコマンド行に追加されるコマンド行オプションが含まれるオプションのActivationGroupDesc.CommandEnvironmentを指定します。デフォルトでは、rmidコマンドは、java.homeにあるjavaコマンドを使用します。グループ記述子には、オプションとしてコマンド行に追加されるプロパティ・オーバーライド(-Dproperty=valueと定義)も含まれています。アクセス権com.sun.rmi.rmid.ExecPermissionは、rmidコマンドに、グループ記述子のCommandEnvironmentで指定されたコマンドを実行して起動グループを開始するアクセス権を付与します。アクセス権com.sun.rmi.rmid.ExecOptionPermissionを使用すると、rmidコマンドで、起動グループを開始するときにグループ記述子でプロパティ・オーバーライドとして指定され指定されたコマンド行オプションまたはCommandEnvironmentでオプションとして指定されたコマンド行オプションを使用できるようになります。rmidコマンドに様々なコマンドおよびオプションを実行するアクセス権を付与する場合は、アクセス権ExecPermissionおよびExecOptionPermissionをすべてのコード・ソースに付与する必要があります。

ExecPermissionクラス: rmidコマンドが特定のコマンドを実行して起動グループを開始するためのアクセス権を表します。

ExecPermissionの構文: ExecPermissionの名前は、rmidコマンドに実行するアクセス権を付与するためのコマンドのパス名です。

スラッシュ(/)とアスタリスク(*)で終わるパス名は、すべてのファイルがそのディレクトリに含まれることを示します(スラッシュはファイル・セパレータFile.separatorCharです)。

スラッシュ(/)とマイナス記号(-)で終わるパス名は、(再帰的に)すべてのファイルとサブディレクトリがそのディレクトリに格納されていることを示します。

特別なトークン<<ALL FILES>>で構成されるパス名は、任意のファイルと一致します。

アスタリスク(*)で構成されるパス名は、現在のディレクトリ内にあるすべてのファイルを示します。

マイナス記号(-)で構成されるパス名は、すべてのファイルが現在のディレクトリ内にあり、(再帰的に)すべてのファイルおよびサブディレクトリが現在のディレクトリに格納されていることを示します。

ExecOptionPermissionクラス: 起動グループを開始する際に、rmidコマンドが特定のコマンド行オプションを使用するためのアクセス権を表します。ExecOptionPermissionの名前は、コマンド行オプションの値です。

ExecOptionPermissionの構文: オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカードの一致を表し、オプション名自体として使用したり(任意のオプションと一致)、アスタリスク(*)がドット(.)または等号(=)の後に続く場合にかぎってオプション名の末尾に使用できます。

たとえば、*、-Dmydir.*または-Da.b.c=*は有効ですが、*mydir、-Da*bまたはab*は無効です。

rmidのポリシー・ファイル

rmidコマンドに様々なコマンドおよびオプションを実行するためのアクセス権を付与する場合は、アクセス権ExecPermissionおよびExecOptionPermissionを汎用的にすべてのコード・ソースに付与する必要があります。これらのアクセス権をチェックするのはrmidコマンドだけなので、これらのアクセス権を汎用的に付与しても安全です。

rmidコマンドに様々な実行アクセス権を付与するポリシー・ファイルの例を、次に示します。

- Oracle Solaris:

grant {
permission com.sun.rmi.rmid.ExecPermission
"/files/apps/java/jdk1.7.0/solaris/bin/java";

permission com.sun.rmi.rmid.ExecPermission
"/files/apps/rmidcmds/*";

permission com.sun.rmi.rmid.ExecOptionPermission
"-Djava.security.policy=/files/policies/group.policy";

permission com.sun.rmi.rmid.ExecOptionPermission
"-Djava.security.debug=*";

permission com.sun.rmi.rmid.ExecOptionPermission
"-Dsun.rmi.*";
};

- Windows:

grant {
permission com.sun.rmi.rmid.ExecPermission
"c:\\files\\apps\\java\\jdk1.7.0\\win\\bin\\java";

permission com.sun.rmi.rmid.ExecPermission
"c:\\files\\apps\\rmidcmds\\*";

permission com.sun.rmi.rmid.ExecOptionPermission
"-Djava.security.policy=c:\\files\\policies\\group.policy";

permission com.sun.rmi.rmid.ExecOptionPermission
"-Djava.security.debug=*";

permission com.sun.rmi.rmid.ExecOptionPermission
"-Dsun.rmi.*";
};

1番目に付与されているアクセス権を使用すると、rmidコマンドは明示的なパス名で指定されたjavaコマンドの1.7.0リリースを実行できます。デフォルトでは、java.homeで見つかったバージョンのjavaコマンド(rmidコマンドが使用するバージョンと同じ)が使用されるため、ポリシー・ファイルで指定する必要はありません。2番目のアクセス権を使用すると、rmidコマンドは、ディレクトリ/files/apps/rmidcmds (Oracle Solaris、LinuxおよびmacOS)またはディレクトリc:\files\apps\rmidcmds\ (Windows)のいずれかでコマンドを実行できます。

3番目に付与されているアクセス権ExecOptionPermissionを使用すると、rmidコマンドは、セキュリティ・ポリシー・ファイルを/files/policies/group.policy (Oracle Solaris)またはc:\files\policies\group.policy (Windows)のいずれかとして定義している起動グループを開始できます。その次に付与されているアクセス権を使用すると、起動グループがjava.security.debugプロパティを使用できます。最後のアクセス権を使用すると、起動グループがsun.rmiというプロパティ名の階層内の任意のプロパティを使用できます。

ポリシー・ファイルを指定してrmidコマンドを開始するには、rmidのコマンド行でjava.security.policyプロパティを指定する必要があります。次に例を示します。

rmid -J-Djava.security.policy=rmid.policy

- policyClassName
デフォルトの動作では十分な柔軟性が得られない場合、管理者はrmidコマンドの起動時に、checkExecCommandメソッドが実行されるクラスの名前を指定してrmidコマンドで実行されるコマンドをチェックできます。

policyClassNameには、引数のないpublicコンストラクタを持ち、次のようなcheckExecCommandメソッドを実装しているpublicクラスを指定します。

public void checkExecCommand(ActivationGroupDesc desc, String[] command)
throws SecurityException;

起動グループを開始する前に、rmidコマンドは、ポリシーのcheckExecCommandメソッドを呼び出し、そのメソッドに起動グループ記述子と、起動グループを開始するための完全なコマンドを含む配列を渡します。checkExecCommandがSecurityExceptionをスローすると、rmidコマンドはその起動グループを開始せず、オブジェクトの起動を試行している呼出し側にActivationExceptionがスローされます。

- none
sun.rmi.activation.execPolicyプロパティの値がnoneの場合、rmidコマンドは、起動グループを開始するコマンドの検証を一切実行しません。

-log dir

起動システム・デーモンがデータベースおよび関連情報を書き込むのに使用するディレクトリの名前を指定します。デフォルトでは、rmidコマンドが実行されたディレクトリに、logというログ・ディレクトリが作成されます。

-port port

レジストリで使用されるポートを指定します。起動システム・デーモンは、このレジストリの中で、java.rmi.activation.ActivationSystemという名前でActivationSystemをバインドします。ローカル・マシン上のActivationSystemは、次のようにNaming.lookupメソッドを呼び出すことによって取得できます。

import java.rmi.*;
import java.rmi.activation.*;

ActivationSystem system; system = (ActivationSystem)
Naming.lookup("//:port/java.rmi.activation.ActivationSystem");

-stop

-portオプションで指定されたポートについて、rmidコマンドの現在の呼出しを停止します。ポートが指定されていない場合、このオプションはポート1098で実行されているrmidの呼出しを停止します。

環境変数

CLASSPATH

ユーザー定義クラスへのパスをシステムに指定します。ディレクトリは、セミコロン(;) (Windows)またはコロン(:) (Oracle Solaris)で区切ります。例:

- Oracle Solaris:
.:/usr/local/java/classes

- Windows:
.;C:\usr\local\java\classes

serialver

serialverコマンドは、1つ以上のクラスのserialVersionUIDを、展開しているクラスにコピーするのに適した形式で返す場合に使用します。

形式

serialver [ options ] [ classnames ]

options

これは、serialverコマンドのコマンド行オプションです。「serialverのオプション」を参照してください。

classnames

serialVersionUIDが返されるクラスです。

説明

serialverコマンドは、1つ以上のクラスのserialVersionUIDを、展開しているクラスにコピーするのに適した形式で返します。引数を指定しないでserialverコマンドを呼び出すと、使用法を示す行が出力されます。

serialverのオプション

-classpath path-files

アプリケーションのクラスおよびリソースの検索パスを設定します。個々のクラスおよびリソースはコロン(:)で区切ります。

-Joption

Java仮想マシンに指定されたoptionを渡します(optionは、Javaアプリケーション・ランチャのリファレンス・ページに記載されているいずれかのオプションです)。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。

注

serialverコマンドは、指定されたクラスをその仮想マシンにロードして初期化しますが、デフォルトではセキュリティ・マネージャの設定は行いません。信頼できないクラスとともにserialverコマンドを実行する場合は、次のオプションを使用してセキュリティ・マネージャを設定できます。

-J-Djava.security.manager

必要であれば、次のオプションを使用してセキュリティ・ポリシーを指定できます。

-J-Djava.security.policy=policy file

6 Java IDLとJava RMI-IIOPのツールおよびコマンド

Javaインタフェース定義言語(IDL)およびJava Remote Method Invocation interface over the Internet Inter-Orb Protocol (RMI-IIOP)のツールとコマンドを使用して、OMG標準IDLおよびCORBA/IIOPを使用するアプリケーションを作成します。

次の各項では、Java IDLとJava RMI-IIOPのツールおよびコマンドについて説明します。

- tnameserv: tnameservコマンドは、Object Request Broker Daemon (ORBD)の代替として使用します。Javaインタフェース定義言語(IDL)ネーム・サーバーを起動します。

- idlj: idljコマンドは、指定されたインタフェース定義言語(IDL)ファイルのJavaバインディングを生成する場合に使用します。

- orbd: orbdコマンドは、クライアントがCORBA環境内のサーバーにある永続オブジェクトを透過的に検索して呼び出す場合に使用します。

- servertool: servertoolコマンド行ツールは、永続サーバーを登録、登録解除、起動および停止する場合に使用します。

tnameserv

tnameservコマンドは、Object Request Broker Daemon (ORBD)の代替として使用します。

形式

tnameserve -ORBInitialPort [ nameserverport ]

-ORBInitialPort nameserverport

ネーム・サービスがブートストラップ・プロトコルを待機する初期ポートです。このプロトコルは、ORBのresolve_initial_referencesメソッドとlist_initial_referencesメソッドを実装する際に使用されます。

説明

Javaインタフェース定義言語(IDL)には、Object Request Broker Daemon (ORBD)が含まれています。ORBDは、ブートストラップ・サービス、一時ネーム・サービス、持続ネーム・サービスおよびサーバー・マネージャを含むデーモン・プロセスです。Java IDLのすべてのチュートリアルでORBDが使用されていますが、一時ネーム・サービスを使用する例では、orbdコマンドの代わりにtnameservコマンドを使用できます。

CORBAのCOS (Common Object Services)ネーム・サービスは、ファイル・システムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDLの一時ネーム・サービスであるtnameservは、COSネーム・サービスの仕様を単純な形で実装したものです。

オブジェクト参照は名前空間に名前で格納され、それぞれのオブジェクト参照と名前のペアはネーム・バインディングと呼ばれます。ネーム・バインディングはネーミング・コンテキストに組み込むことができます。ネーミング・コンテキストはネーム・バインディングであり、ファイル・システムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは初期ネーミング・コンテキストの下に格納されます。初期ネーミング・コンテキストは、名前空間内の唯一の持続バインディングです。残りの名前空間は、Java IDLのネーム・サービス・プロセスが停止し、再起動されると失われます。

アプレットまたはアプリケーションでCOSネーム・サービスを使用するには、そのORBDが、ネーム・サービスが稼働しているホストのポートを認識しているか、そのネーム・サービスの初期ネーミング・コンテキスト文字列へのアクセス権を持っている必要があります。ネーム・サービスは、Java IDLのネーム・サービスでもその他のCOS準拠のネーム・サービスでもかまいません。

ネーム・サービスを起動する

Java IDLネーム・サービスは、ネーム・サービスを使用するアプリケーションまたはアプレットより前に起動しておかなければなりません。Java IDL製品をインストールすると、Java IDLネーム・サービスを起動するスクリプト(Oracle Solaris、LinuxおよびOS X: tnameserv)または実行可能ファイル(Windows: tnameserv.exe)が作成されます。バックグラウンドで稼働するように、ネーム・サービスを起動してください。

特に指定しない場合、Java IDLネーム・サービスは次のように、Object Request Broker (ORB)のresolve_initial_referencesおよびlist_initial_references methodsの実装に使用されるブートストラップ・プロトコルをポート900でリスニングにします。

tnameserv -ORBInitialPort nameserverport&

ネーム・サーバーのポートを指定しない場合、デフォルトでポート900が使用されます。Oracle Solarisソフトウェアの実行時は、1024より小さいポートでプロセスを開始する際に、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。1050などの別のポートを指定し、ネーム・サービスをバックグラウンドで実行するには、Oracle Solaris、LinuxまたはOS Xコマンド・シェルで次のように入力します。

tnameserv -ORBInitialPort 1050&

WindowsのMS-DOSシステム・プロンプトでは、次のように入力します。

start tnameserv -ORBInitialPort 1050

ネーム・サーバーのクライアントには、新しいポート番号を知らせる必要があります。このため、ORBオブジェクトの作成時にorg.omg.CORBA.ORBInitialPortプロパティに新しいポート番号を設定します。

異なるマシン上でのクライアントとサーバーの実行

Java IDLとRMI-IIOPのほとんどのチュートリアルでは、ネーム・サービス、サーバーおよびクライアントはすべて開発用のマシン上で実行されます。実際に配備する際には、クライアントとサーバーをネーム・サービスとは異なるホスト上で実行することが多くあります。

クライアントとサーバーがネーム・サービスを見つけるには、クライアントとサーバーが、ネーム・サービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内のorg.omg.CORBA.ORBInitialPortプロパティとorg.omg.CORBA.ORBInitialHostプロパティをネーム・サービスが実行されているポートの番号とマシンの名前に設定します。

コマンド行オプション-ORBInitialPort nameserverport#と-ORBInitialHost nameserverhostnameを使用して、クライアントとサーバーに対してネーム・サービスを探す場所を指定することもできます。

たとえば、一時ネーム・サービスtnameservが、ホストnameserverhostのポート1050上で実行されているとします。さらに、クライアントがホストclienthost上で実行され、サーバーはホストserverhost上で実行されているとします。

ホストnameserverhost上でtnameservを起動します。

tnameserv -ORBInitialPort 1050

serverhost上でサーバーを起動します。

java Server -ORBInitialPort 1050 -ORBInitialHost nameserverhost

clienthost上でクライアントを起動します。

java Client -ORBInitialPort 1050 -ORBInitialHost nameserverhost

ネーム・サービスの停止

Java IDLネーム・サービスを停止するには、Oracle Solaris、LinuxまたはOS Xプロセスの場合は、killなどの関連するオペレーティング・システム・コマンドを使用し、Windowsプロセスの場合は、[Ctrl]+[C]を使用します。ネーム・サービスを明示的に停止するまでは、呼出し待機状態が続きます。なお、サービスを終了させると、Java IDLネーム・サービスに登録されている名前は失われます。

オプション

-Joption

JVMにoptionを渡します(optionは、Javaアプリケーション・ランチャのリファレンス・ページに記載されているいずれかのオプションです)。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。「javaのオプションの概要」を参照してください。

ネームスペースへのオブジェクトの追加例

この例では、次の単純なツリーに名前を追加する方法を示します。

Initial Naming Context
plans
Personal
calendar
schedule

このツリーでは、plansはオブジェクト参照、Personalはcalendarとscheduleの2つのオブジェクト参照を含むネーミング・コンテキストです。

次のサンプル・プログラムは、自己完結型の一時ネーム・サービス・クライアントで、次のような単純なツリーを作成します。

import java.util.Properties;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;

public class NameClient {

public static void main(String args[]) {

try {

「ネーム・サービスの起動」では、nameserverがポート1050で起動されました。次のコード例では、クライアント・プログラムはこのポート番号を確実に認識します。

Properties props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort", "1050");
ORB orb = ORB.init(args, props);

次のコード例では、初期ネーミング・コンテキストを取得し、それをctxに代入します。2行目では、様々な名前に割り当てられ、名前空間に追加されるダミーのオブジェクト参照objrefに、ctxがコピーされます。

NamingContext ctx =
NamingContextHelper.narrow(
orb.resolve_initial_references("NameService"));
NamingContext objref = ctx;

次のコード例では、text型の名前plansを作成し、それをダミーのオブジェクト参照にバインドします。その後、rebindメソッドを使用して初期ネーミング・コンテキストの下にplansを追加します。rebindメソッドを使用すれば、bindメソッドを使用したときに発生する例外を発生させずに、このプログラムを何度も繰返し実行できます。

NameComponent nc1 = new NameComponent("plans", "text");
NameComponent[] name1 = {nc1};
ctx.rebind(name1, objref);
System.out.println("plans rebind successful!");

次のコード例では、directory型のPersonalというネーミング・コンテキストを作成します。その結果得られるオブジェクト参照ctx2がnameにバインドされ、初期ネーミング・コンテキストの下に追加されます。

NameComponent nc2 = new NameComponent("Personal", "directory");
NameComponent[] name2 = {nc2};
NamingContext ctx2 = ctx.bind_new_context(name2);
System.out.println("new naming context added..");

残りのコードでは、ダミーのオブジェクト参照がscheduleとcalendarという名前を使用してネーミング・コンテキストPersonal (ctx2)にバインドされます。

NameComponent nc3 = new NameComponent("schedule", "text");
NameComponent[] name3 = {nc3};
ctx2.rebind(name3, objref);
System.out.println("schedule rebind successful!");

NameComponent nc4 = new NameComponent("calendar", "text");
NameComponent[] name4 = {nc4};
ctx2.rebind(name4, objref);
System.out.println("calendar rebind successful!");
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
}

ネームスペースの参照例

次のサンプル・プログラムでは、ネームスペースを参照する方法を示します。

import java.util.Properties;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;

public class NameClientList {

public static void main(String args[]) {

try {

「ネーム・サービスの起動」では、nameserverがポート1050で起動されました。次のコード例では、クライアント・プログラムはこのポート番号を確実に認識します。

Properties props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort", "1050");
ORB orb = ORB.init(args, props);

次のコード例では、初期ネーミング・コンテキストを取得します。

NamingContext nc =
NamingContextHelper.narrow(
orb.resolve_initial_references("NameService"));

listメソッドは、ネーミング・コンテキスト内のバインディングを一覧表示します。この場合、最大1000個までのバインディングが初期ネーミング・コンテキストからBindingListHolderに返されます。残りのバインディングは、BindingIteratorHolderに返されます。

BindingListHolder bl = new BindingListHolder();
BindingIteratorHolder blIt= new BindingIteratorHolder();
nc.list(1000, bl, blIt);

次のコード例では、返されたBindingListHolderからバインディングの配列を取得します。バインディングがない場合は、プログラムが終了します。

Binding bindings[] = bl.value;
if (bindings.length == 0) return;

残りのコードでは、バインディングに対してループ処理が行われ、名前が出力されます。

for (int i=0; i < bindings.length; i++) {

// get the object reference for each binding
org.omg.CORBA.Object obj = nc.resolve(bindings[i].binding_name);
String objStr = orb.object_to_string(obj);
int lastIx = bindings[i].binding_name.length-1;

// check to see if this is a naming context
if (bindings[i].binding_type == BindingType.ncontext) {
System.out.println("Context: " +
bindings[i].binding_name[lastIx].id);
} else {
System.out.println("Object: " +
bindings[i].binding_name[lastIx].id);
}
}
} catch (Exception e) {
e.printStackTrace(System.err)
}
}
}

idlj

idljコマンドは、指定されたインタフェース定義言語(IDL)ファイルのJavaバインディングを生成する場合に使用します。

形式

idlj [options] idlfile

options

コマンド行オプションです。オプションの順番は任意ですが、idlfileよりも前に指定する必要があります。「idljのオプション」を参照してください。

idlfile

インタフェース定義言語(IDL)の定義が含まれるファイルの名前です。idlfileは必須であり、最後に指定する必要があります。

説明

IDL-to-Javaコンパイラは、指定されたIDLファイルについてJavaバインディングを生成します。IDL-to-Javaコンパイラの以前のリリースの中には、idltojavaという名前だったものがあります。

クライアント・バインディングおよびサーバー・バインディングの発行

次のidljコマンドは、クライアント側のバインディングを持つMy.idlという名前のIDLファイルを生成します。

idlj My.idl

以前の構文は次のとおりです。

idlj -fclient My.idl

次の例では、サーバー側のバインディングを生成し、クライアント側のバインディングに加えて、スケルトンを追加します。これらはすべてPortable Object Adapter (継承モデル)です。

idlg -fserver My.idl

クライアント側とサーバー側の両方のバインディングを生成する場合は、次のコマンド(どれも等価)のうちの1つを使用します。

idlj -fclient -fserver My.idl
idlj -fall My.idl

使用可能なサーバー側のモデルには、次の2つがあります。

- 移殖可能サーバント継承モデル

- Tieモデル

移殖可能サーバント継承モデル

デフォルトのサーバー側のモデルは、移殖可能サーバント継承モデルです。インタフェースMyがMy.idlに定義されている場合は、ファイルMyPOA.javaが生成されます。Myインタフェースに対して実装を提供する必要があり、MyインタフェースはMyPOAクラスから継承する必要があります。MyPOA.javaは、org.omg.PortableServer.Servantクラスを拡張するストリームベースのスケルトンです。

Myインタフェースは、スケルトンが実装するIDLインタフェースに関連付けられているcallHandlerインタフェースとオペレーション・インタフェースを実装します。

Portable Object Adapter (POA)のPortableServerモジュールには、ネイティブServant型を定義します。

Javaプログラミング言語では、Servant型がJava org.omg.PortableServer.Servantクラスにマッピングされます。このクラスは、すべてのPOAサーバント実装の基底クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッドおよびPOAによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。

継承モデルのもう1つのオプションは、-oldImplBaseフラグを使用して、Java SE 1.4より前のバージョンのJavaプログラミング言語と互換性のあるサーバー側のバインディングを生成することです。-oldImplBaseフラグは非標準であり、これらのAPIは非推奨です。このフラグを使用するのは、Java SE 1.3で記述された既存のサーバーとの互換性を保つ場合のみです。その場合には既存のmakeファイルを変更し、idljコンパイラに-oldImplBaseフラグを追加する必要があります。そうしない場合は、POAベースのサーバー側マッピングが生成されます。下位互換性のあるサーバー側のバインディングを生成するには、次のように実行します。

idlj -fclient -fserver -oldImplBase My.idl
idlj -fall -oldImplBase My.idl

インタフェースMyがMy.idlに定義されている場合は、ファイル_MyImplBase.javaが生成されます。Myインタフェースに対して実装を提供する必要があり、Myインタフェースは_MyImplBaseクラスから継承する必要があります。

Tieモデル

もう1つのサーバー側モデルは、Tieモデルと呼ばれるものです。このサーバー側モデルは、委譲モデルです。Tieとスケルトンを同時に生成することはできないため、それらは別々に生成する必要があります。次のコマンドによって、Tieモデル用のバインディングが生成されます。

idlj -fall My.idl
idlj -fallTIE My.idl

Myインタフェースの場合、前述の2番目のコマンドにより、MyPOATie.javaが生成されます。MyPOATieクラスのコンストラクタは、委譲を取ります。この例では、デフォルトのPOAモデルを使用しているため、コンストラクタにもPOAが必要です。委譲に対して実装を提供する必要があります。その実装はMyOperationsインタフェースからのみ継承する必要があり、その他のクラスから継承する必要はありません。この実装をORBと一緒に使用するには、次の例に示すように、MyPOATieクラス内で実装をラップする必要があります。

ORB orb = ORB.init(args, System.getProperties());

// Get reference to rootpoa & activate the POAManager
POA rootpoa = (POA)orb.resolve_initial_references("RootPOA");
rootpoa.the_POAManager().activate();

// create servant and register it with the ORB
MyServant myDelegate = new MyServant();
myDelegate.setORB(orb);

// create a tie, with servant being the delegate.
MyPOATie tie = new MyPOATie(myDelegate, rootpoa);

// obtain the objectRef for the tie
My ref = tie._this(orb);

他の実装から継承しなければならない場合、標準の継承モデルではなくTieモデルを使用することがあります。Javaの場合は、インタフェースの継承の個数に制限はありませんが、クラスの継承に使用できるスロットは1つのみです。継承モデルを使用した場合は、そのスロットが占有されます。Tieモデルを使用した場合は、そのスロットが使用されず、ユーザーが独自の目的で使用できます。これには、間接参照のレベルが1つ導入されるという短所があります。つまり、メソッドを呼び出すときに、余分なメソッド呼出しが1回発生します。

サーバー側の生成では、次のTieモデルのバインディングは、Java SE 1.4よりも前のバージョンでのIDLとJavaプログラミング言語とのマッピングのバージョンと互換性があります。

idlj -oldImplBase -fall My.idl
idlj -oldImplBase -fallTIE My.idl

Myインタフェースの場合、これによりMy_Tie.javaが生成されます。My_Tieクラスのコンストラクタは、implオブジェクトを取ります。implに対して実装を提供する必要がありますが、この実装はHelloOperationsインタフェースからのみ継承する必要があり、その他のクラスから継承する必要はありません。ただし、この実装をORBと一緒に使用するには、My_Tie内で実装をラップする必要があります。例:

ORB orb = ORB.init(args, System.getProperties());

// create servant and register it with the ORB
MyServant myDelegate = new MyServant();
myDelegate.setORB(orb);

// create a tie, with servant being the delegate.
MyPOATie tie = new MyPOATie(myDelegate);

// obtain the objectRef for the tie
My ref = tie._this(orb);

発行されたファイルの代替位置の指定

発行されたファイルを現在のディレクトリ以外のディレクトリに置くには、次の方法でコンパイラを呼び出します。

idlj -td /altdir My.idl

Myインタフェースの場合、バインディングは./My.javaではなく、/altdir/My.javaに発行されます。

インクルード・ファイルの代替位置の指定

My.idlファイルにもう1つのidlファイルMyOther.idlがインクルードされている場合、コンパイラはローカル・ディレクトリにMyOther.idlがあるものと想定します。たとえば、そのファイルが/includesにある場合は、次のようなコマンドでコンパイラを呼び出します。

idlj -i /includes My.idl

たとえば、/moreIncludesにあるAnother.idlもMy.idlにインクルードされているのであれば、次のコマンドでコンパイラを呼び出します。

idlj -i /includes -i /moreIncludes My.idl

このような形式でincludeファイルを指定すると、コマンドが長くなるため、インクルード・ファイルを検索する場所をコンパイラに指示するための別の方法が用意されています。この方法は、環境変数の考え方と似ています。CLASSPATH変数にリストされているディレクトリ内に、idl.configという名前のファイルを作成します。そのidl.configの中に、次の形式で行を指定します。

includes=/includes;/moreIncludes

コンパイラは、このファイルを検索し、インクルード・リストを読み込みます。この例では、2つのディレクトリの間のセパレータはセミコロン(;)になっています。このセパレータは、プラットフォームによって異なります。Windowsプラットフォームではセミコロンを使用し、Oracle Solaris、LinuxおよびOS Xプラットフォームではコロンを使用します。

インクルード・ファイルに対するバインディングの発行

デフォルトでは、コマンド行に指定したidlファイルで定義されているインタフェースや構造体などについてのみ、Javaバインディングが生成されます。インクルードされたファイルで定義されている型については、生成されません。たとえば、次の2つのidlファイルについて考えてみましょう。

My.idl file:

#include <MyOther.idl>
interface My
{
};

MyOther.idl file:

interface MyOther
{
};

このデフォルトの規則に関して注意することがあります。グローバル・スコープに指定した#include文は、前述のとおりに処理されます。これらの#include文は、インポート文とみなすことができます。それに対して、他の定義に囲まれたスコープ内に指定した#include文は、本当の意味での#include文として処理されます。つまり、インクルードされたファイルにあるコードが、元のファイルにそのまま指定されているかのように処理され、それに対してJavaバインディングが発行されます。例:

My.idl file:

#include <MyOther.idl>
interface My
{
#include <Embedded.idl>
};

MyOther.idl file:

interface MyOther
{
};

Embedded.idl

enum E {one, two, three};

idlj My.idlを実行すると、次のようなJavaファイルのリストが生成されます。インポート文と見なされる#includeに定義されているため、MyOther.javaは生成されませんでした。ただし、本当の意味での#includeで定義されているため、E.javaは生成されました。Embedded.idlファイルがMyインタフェースのスコープ内にインクルードされていたため、Myのスコープ内(つまり、MyPackage内)に生成されています。-emitAllフラグを使用すれば、インクルードされたすべてのファイルにあるすべての型が発行されます。

./MyHolder.java
./MyHelper.java
./_MyStub.java
./MyPackage
./MyPackage/EHolder.java
./MyPackage/EHelper.java
./MyPackage/E.java
./My.java

パッケージの接頭辞の挿入

ABCという名前の会社のために作業していて、次のようなIDLファイルを構築したとしましょう。

Widgets.idl file:

module Widgets
{
interface W1 {...};
interface W2 {...};
};

このファイルをIDL-to-Javaコンパイラから実行すると、W1およびW2に対するJavaバインディングがWidgetsパッケージ内に生成されます。業界の慣例によると、会社のパッケージは、com.<company name>という名前のパッケージ内に置くことになっています。この慣例に従うには、パッケージ名をcom.abc.Widgetsにするようにしてください。このパッケージ接頭辞をWidgetsモジュールに付加するには、次のコマンドを実行します。

idlj -pkgPrefix Widgets com.abc Widgets.idl

Widgets.idlをインクルードしているIDLファイルがある場合は、そのコマンドにも-pkgPrefixフラグが必要です。このフラグを指定しないと、そのIDLファイルは、com.abc.Widgetsパッケージではなく、Widgetsパッケージを検索することになります。

接頭辞が必要なパッケージがいくつもある場合は、前述のidl.configファイルで接頭辞を指定する方法が簡単です。パッケージの接頭辞を指定する行は、それぞれPkgPrefix.<type>=<prefix>の形式で記述します。前述の例では、PkgPrefix.Widgets=com.abcという行になります。このオプションによって、リポジトリIDは影響を受けません。

コンパイル前のシンボルの定義

コンパイル用のシンボルがIDLファイル内で定義されていない場合は、そのシンボルを定義する必要があります。これは、たとえば、バインディング内にデバッグ・コードを組み入れるときに使用します。idlj -d MYDEF My.idlコマンドは、My.idl内に#define MYDEFという行を指定した場合と同等です。

既存のバインディングの保持

Javaバインディング・ファイルがすでに存在する場合は、-keepフラグを指定すると、コンパイラによる上書きを回避できます。デフォルトでは、すでに存在するかどうかにかかわらず、すべてのファイルが生成されます。これらのファイルをカスタマイズした場合(ただし、それらの内容が正確であるとき以外はカスタマイズは避ける)、-keepオプションは有用です。idlj -keep My.idlコマンドは、まだ存在しないクライアント側のバインディングをすべて発行します。

コンパイルの進捗状況の表示

IDL-to-Javaコンパイラは、実行の各段階でステータス・メッセージを生成します。冗長モードをアクティブ化するには、-vオプションを使用します: idlj -v My.idl。

デフォルトでは、コンパイラは冗長モードでは実行されません。

バージョン情報の表示

IDL-to-Javaコンパイラのビルド・バージョンを表示するには、コマンド行で-versionオプションを指定します: idlj -version。

バージョン情報は、コンパイラによって生成されたバインディング内にも書き込まれています。このオプションをコマンド行に指定すると、それ以外のオプションを指定しても、すべて無視されます。

idljのオプション

-d symbol

IDLファイルに次の行を追加した場合と同等です。

#define symbol

-emitAll

#includedファイル内で定義されているものも含めて、すべての型を発行します。

-fside

発行するバインディングを定義します。sideパラメータは、client、server、serverTIE、all、allTIEのいずれかです。-fserverTIEおよび-fallTIEオプションを指定すると、委譲モデル・スケルトンが発行されます。このフラグを指定しなかった場合は、デフォルトで-fclientに設定されます。

-i include-path

デフォルトでは、インクルード・ファイルは現在のディレクトリから検索されます。このオプションを指定すると、ほかのディレクトリを追加できます。

-keep

生成されるファイルがすでに存在している場合は、そのファイルが上書きされません。デフォルトでは、上書きされます。

-noWarn

警告メッセージを表示しないようにします。

-oldImplBase

1.4より前のJDK ORBと互換性のあるスケルトンを生成します。デフォルトでは、POA継承モデルのサーバー側バインディングが生成されます。このオプションを指定すると、ImplBase継承モデルのクラスであるサーバー側のバインディングが生成されるので、以前のバージョンのJavaプログラミング言語との下位互換性が得られます。

-pkgPrefix type prefix

typeがファイル・スコープで検出された場合は、その型に対して生成されるすべてのファイルについて、生成されるJavaパッケージ名にprefixという接頭辞が付加されます。typeは、トップレベル・モジュールの単純名か、どのモジュールよりも外側で定義されたIDL型の単純名のどちらかです。

-pkgTranslate type package

識別子の中にモジュール名の型が検出されると、生成されるJavaパッケージ内のすべてのファイルについて、識別子の中のその名前がパッケージで置き換えられます。最初にpkgPrefixが変更されることに注意してください。型の値は、トップ・レベルのモジュールまたはすべてのモジュールの外部で定義されたIDL型の単純名であり、完全なパッケージ名に正確に一致する必要があります。

1つの識別子の中で複数の変換が一致する場合は、次の例で示すように、もっとも長い一致が選ばれます。

コマンド:

pkgTranslate type pkg -pkgTranslate type2.baz pkg2.fizz

変換結果:

type => pkg
type.ext => pkg.ext
type.baz => pkg2.fizz
type2.baz.pkg => pkg2.fizz.pkg

パッケージ名org、org.omg、またはorg.omgのサブパッケージは変換できません。これらのパッケージを変換しようとすると、互換性のないコードが生成され、-pkgTranslateの後の最初の引数としてそれらのパッケージを使用すると、エラーとして処理されます。

-skeletonName xxx%yyy

xxx%yyyが、スケルトンに名前を付けるパターンとして使用されます。デフォルトは、POA基底クラス(-fserverまたは-fall)の場合は%POA、oldImplBaseクラス(-oldImplBase)および(-fserverまたは-fall)の場合は_%ImplBaseです。

-td dir

現在のディレクトリではなく、出力ディレクトリとしてdirが使用されます。

-tieName xxx%yyy

パターンに応じてxxx%yyyを使用します。デフォルトは、POA基底クラス(-fserverTieまたは-fallTie)の場合は%POA、oldImplBase tieクラス(-oldImplBase)および(-fserverTieまたは-fallTie)の場合は_%Tieです。

-vまたは-verbose

リリース情報を表示して終了します。

-version

リリース情報を表示して終了します。

制約

グローバル・スコープ内のエスケープされた識別子は、IDLプリミティブ型のObjectまたはValueBaseと同じ綴りにすることができません。これは、これらの識別子を持つシンボル表が事前にロードされているためです。これらの再定義を許可すると、元の定義が上書きされてしまいます。これは、おそらく恒久的な制約です。

fixedというIDL型はサポートされていません。

既知の問題点

グローバル識別子についてインポートが生成されません。予期されないローカルimplオブジェクトを呼び出すと、例外を受け取ります。ただし、その原因は、ServerDelegate DSIコード内のNullPointerExceptionにあるようです。

orbd

orbdコマンドは、クライアントがCORBA環境内のサーバーにある永続オブジェクトを透過的に検索して呼び出す場合に使用します。

形式

orbd [ options ]

options

コマンド行オプション。「orbdのオプション」を参照してください。

説明

orbdコマンドを使用すると、クライアントがCORBA環境内のサーバーにある持続オブジェクトを検索して呼び出すことができます。orbdツールに含まれるサーバー・マネージャを使用すると、クライアントはCORBA環境でサーバー上にある永続オブジェクトを透過的に検索して呼び出すことができます。永続サーバーは、ネーム・サービスに永続オブジェクト参照を発行する際、サーバーのポート番号のかわりにorbdのポート番号をオブジェクト参照に含めます。永続オブジェクト参照のオブジェクト参照にorbdポート番号を含めることには、次のような利点があります。

- ネーム・サービスにあるオブジェクト参照が、サーバーのライフ・タイムと無関係になる。たとえば、オブジェクト参照は、ネーム・サービスのサーバーが初めてインストールされたときはそのサーバーによって発行されますが、その後は、サーバーの起動または停止の回数にかかわらず、orbdは呼出し側クライアントに正しいオブジェクト参照を返します。

- クライアントは一度だけネーミング・サービスのオブジェクト参照をルックアップする必要があるが、その後はサーバーのライフ・タイムによる変更とは無関係にこの参照を利用することができる。

orbdのサーバー・マネージャにアクセスするには、servertoolを使用してサーバーを起動する必要があります。このツールは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動およびシャットダウンを行うためのコマンド行インタフェースです。「サーバー・マネージャ」を参照してください。

orbdを起動すると、ネーム・サービスも起動されます。後述の「ネーム・サービスの起動と停止」を参照してください。

orbdのオプション

-ORBInitialPort nameserverport

必須です。ネーム・サーバーを起動するポートの番号を指定します。orbdは、起動されると、このポート上で着信要求をリスニングします。Oracle Solarisソフトウェアでは、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。

必須ではないオプション

-port port

orbdを起動する起動ポートを指定します。このポートで、orbdは永続オブジェクトに対する要求を受け取ります。このポートのデフォルト値は1049です。このポート番号は、持続Interoperable Object References (IOR)のポート・フィールドに追加されます。

-defaultdb directory

orbd永続格納ディレクトリorb.dbが作成されるベース・ディレクトリを指定します。このオプションを指定しなかった場合、デフォルト値は./orb.dbとなります。

-serverPollingTime milliseconds

servertoolを使用して登録された永続サーバーが正常に動作していることをORBDがチェックする間隔を指定します。デフォルト値は1000ミリ秒です。millisecondsに指定する値は、有効な正の整数である必要があります。

-serverStartupDelay milliseconds

servertoolを使用して登録された永続サーバーを再起動してから、位置転送の例外を送信するまでのorbdの待機時間を指定します。デフォルト値は1000ミリ秒です。millisecondsに指定する値は、有効な正の整数である必要があります。

-J option

Java仮想マシンにoptionを渡します(optionは、Javaアプリケーション起動ツールのリファレンス・ページに記載されているいずれかのオプション)。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。「java」を参照してください。

ネーム・サービスの起動と停止

ネーム・サービスは、名前をオブジェクト参照にバインドすることで、CORBAオブジェクトに名前を付けることができるCORBAサービスです。ネーム・バインディングはネーム・サービスに格納でき、クライアントは名前を付けて目的のオブジェクト参照を取得できます。

orbdは、クライアントまたはサーバーを実行する前に起動します。orbdコマンドには、永続ネーム・サービスおよび一時ネーム・サービスが組み込まれています。これらはどちらもCOSネーム・サービスの実装です。

持続ネーム・サービスは、ネーミング・コンテキストに対して持続性を提供します。つまり、この情報は、サービスの停止や起動後にも維持され、サービスに障害が発生した場合でも回復できます。ORBDを再起動すると、持続ネーム・サービスはネーミング・コンテキストのグラフを復元し、すべてのクライアントとサーバーの名前のバインディングが保持されます。

下位互換性を保つために、以前のリリースのJDKに同梱されていた一時ネーム・サービスであるtnameservが、今回のリリースのJava SEにも同梱されています。一時ネーム・サービスでは、ネーム・サービスの実行中にのみネーミング・コンテキストが保持されます。サービスが中断されると、ネーミング・コンテキストのグラフは失われます。

-ORBInitialPort引数は、orbdの必須のコマンド行引数で、ネーム・サービスが実行されるポートの番号を設定するために使用されます。次の説明では、Java IDL Object Request Broker Daemon用にポート1050を使用できることを前提としています。Oracle Solarisソフトウェアを使用する場合、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。必要であれば別のポートに変更してください。

Oracle Solaris、LinuxまたはOS Xコマンド・シェルからorbdを起動するには、次のように入力します。

orbd -ORBInitialPort 1050&

WindowsのMS-DOSシステム・プロンプトでは、次のように入力します。

start orbd -ORBInitialPort 1050

これでorbdが実行され、サーバーとクライアントのアプリケーションを実行できるようになります。クライアントとサーバーのアプリケーションは、実行時に、ネーム・サービスが実行されているポートの番号(必要な場合はさらにマシン名)を認識している必要があります。これを実現する1つの方法は、次のコードをアプリケーションに追加することです。

Properties props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort", "1050");
props.put("org.omg.CORBA.ORBInitialHost", "MyHost");
ORB orb = ORB.init(args, props);

この例では、ネーム・サービスはホストMyHostのポート1050上で実行されています。別の方法として、コマンド行からサーバーまたはクライアントのアプリケーションを実行するときに、ポート番号またはマシン名あるいはその両方を指定する方法もあります。たとえば、次のコマンド行を使用して、HelloApplicationを起動します。

java HelloApplication -ORBInitialPort 1050 -ORBInitialHost MyHost

ネーム・サービスを停止するには、適切なオペレーティング・システム・コマンドを使用します。たとえば、Oracle Solarisではpkill orbdを使用し、orbdが実行されているDOSウィンドウではCtrl+Cキーを使用します。一時ネーム・サービスが原因でサービスが終了されると、ネーム・サービスに登録された名前が消去される場合があります。Java IDLネーム・サービスは、明示的に停止されるまで実行されます。

サーバー・マネージャ

orbdのサーバー・マネージャにアクセスして永続サーバーを実行するには、servertoolを使用してサーバーを起動する必要があります。このツールは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動およびシャットダウンを行うためのコマンド行インタフェースです。servertoolを使用してサーバーを起動する場合は、orbdが実行されている場所と同じポートとホストで起動する必要があります。サーバーを異なるポートで実行すると、ローカル・コンテキスト用にデータベースに格納されている情報が無効になり、サービスが正しく動作しません。

この例では、チュートリアルの手順に従って、idljコンパイラとjavacコンパイラを実行します。orbdのサーバー・マネージャを実行するには、次の手順に従ってアプリケーションを実行します。

1. orbdを起動します。

- Oracle Solaris、LinuxまたはOS Xコマンド・シェルで、orbd -ORBInitialPort 1050と入力します。

- MS-DOSシステム・プロンプト(Windows)で、start orbd -ORBInitialPort 1050と入力します。

2. ポート1050は、ネーム・サーバーを実行するポートです。-ORBInitialPortオプションは、必須のコマンド行引数です。Oracle Solarisソフトウェアを使用する場合、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。

3. servertoolを起動します(例: servertool -ORBInitialPort 1050)。

4. 前回の手順と同様にネーム・サーバー(orbd)のポートを指定します(例: -ORBInitialPort 1050)。servertoolは、ネーム・サーバーと同じポート上で起動する必要があります。

5. servertoolコマンド行インタフェースで、servertoolプロンプトからHelloサーバーを起動します。

servertool  > register -server HelloServer -classpath . -applicationName
HelloServerApName

6. servertoolによってサーバーが登録され、そのサーバーにHelloServerApNameという名前が割り当てられ、登録されているすべてのサーバーのリストとともにサーバーIDが表示されます。別の端末ウィンドウまたはプロンプトからクライアント・アプリケーションを実行します。

java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

7. この例の-ORBInitialHost localhostは、ネーム・サーバーがHelloクライアントとして同一ホスト上で動作しているため、省略できます。ネーム・サーバーが別のホストで稼働している場合は、-ORBInitialHost nameserverhostオプションを使用してIDLネーム・サーバーが稼働しているホストを指定します。前回の手順と同様にネーム・サーバー(orbd)のポートを指定します(たとえば-ORBInitialPort 1050)。orbdのサーバー・マネージャでの試みが終了したら、ネーム・サーバー(orbd)とservertoolをシャットダウンまたは終了します。MS-DOSプロンプトからorbdをシャットダウンするには、サーバーを実行しているウィンドウを選択して[Ctrl]+[C]を押して停止します。

8. Oracle Solarisシェルからorbdをシャットダウンするには、プロセスを検出して、killコマンドで終了します。サーバーを明示的に停止するまでは、呼出し待機状態が続きます。servertoolを停止するには、quitと入力し、[Enter]キーを押します。

servertool

servertoolコマンド行ツールは、永続サーバーを登録、登録解除、起動および停止する場合に使用します。

形式

servertool -ORBInitialPort nameserverport [ options ] [ commands ]

options

コマンド行オプションです。「servertoolのオプション」を参照してください。

commands

コマンド行コマンドです。「servertoolコマンドの使用方法」を参照してください。

コマンドを入力しないでservertoolを起動すると、コマンド行ツールとしてservertool>プロンプトが表示されます。servertool >プロンプトにコマンドを入力します。

コマンドを入力してservertoolを起動すると、Java IDLサーバー・ツールが起動し、コマンドを実行して終了します。

-ORBInitialPort nameserverportオプションは必須です。nameserverportの値には、orbdが実行され、着信要求を待機しているポートを指定する必要があります。

注意:

Oracle Solarisの場合、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。nameserverportの値として1024以上のポート番号を使用することをお薦めします。

説明

servertoolコマンドは、開発者が永続サーバーを登録、登録解除、起動およびシャットダウンするためのコマンド行インタフェースを提供します。コマンド行コマンドを使って、サーバーに関する様々な統計情報を取得できます。「servertoolコマンドの使用方法」を参照してください。

servertoolのオプション

-ORBInitialHost nameserverhost

このオプションは、ネーム・サーバーが稼働し、着信要求をリスニングするホスト・マシンを指定する場合に必要です。nameserverportの値には、orbが実行され、要求を待機しているポートを指定する必要があります。このオプションを指定しない場合のデフォルト値はlocalhostです。orbdとservertoolが異なるマシン上で実行されている場合は、orbdが実行されているホストの名前またはIPアドレスを指定する必要があります。

注意:

Oracle Solarisの場合、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。nameserverportの値として1024以上のポート番号を使用することをお薦めします。

-Joption

Java仮想マシンにoptionを渡します(optionは、Javaアプリケーション起動ツールのリファレンス・ページに記載されているいずれかのオプション)。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。「java」を参照してください。

servertoolコマンドの使用方法

servertoolコマンドは、コマンド行コマンドを指定して起動することも、指定せずに起動することもできます。

- コマンドを指定せずにservertoolを起動した場合は、コマンド行ツールでコマンドを入力できるservertoolプロンプト(servertool >)が表示されます。

- コマンドを指定してservertoolを起動した場合は、Java IDLサーバー・ツールが起動し、コマンドを実行して終了します。

register -server server-class-name -classpath classpath-to-server [ -applicationName application-name -args args-to-server -vmargs flags-for-JVM ]

Object Request Broker Daemon (ORBD)に新規永続サーバーを登録します。サーバーが未登録の場合、登録されて起動されます。このコマンドによって、-serverオプションで識別されるサーバーのmainクラス内でインストール・メソッドが呼び出されます。このインストール・メソッドは、public static void install(org.omg.CORBA.ORB)になっている必要があります。インストール・メソッドはオプションであり、データベース・スキーマの作成などの独自のサーバー・インストール動作を開発者が指定できます。

unregister -serverid server-id | -applicationName application-name

サーバーIDまたはアプリケーション名を使用してORBDからサーバーの登録を解除します。このコマンドによって、-serverオプションで識別されるサーバーのmainクラス内でアンインストール・メソッドが呼び出されます。このuninstallメソッドは、public static void uninstall(org.omg.CORBA.ORB)になっている必要があります。uninstallメソッドはオプションであり、installメソッドの動作を元に戻すなどの独自のサーバー・アンインストール動作を開発者が指定できます。

getserverid -applicationName application-name

application-nameの値に対応するサーバーIDを返します。

list

ORBDに登録されているすべての永続サーバーに関する情報を一覧表示します。

listappnames

現在ORBDに登録されているすべてのサーバーのアプリケーション名を一覧表示します。

listactive

ORBDによって起動され、現在実行されているすべての永続サーバーに関する情報を一覧表示します。

locate -serverid server-id | -applicationName application-name [ -endpointTypeendpointType ]

登録されたサーバーで作成したすべてのORBの特定の型について端点(ポート)を検出します。サーバーが実行されていない場合、起動されます。endpointTypeの値を指定しなかった場合、サーバーのORBごとに関連付けられているplain型またはnon-protected型のエンドポイントが返されます。

locateperorb -serverid server-id | -applicationName application-name [ -orbidORB-name ]

登録されたサーバーの特定のObject Request Broker (ORB)で登録されたすべてのエンドポイント(ポート)を検出します。サーバーが実行されていない場合、起動されます。orbidを指定しなかった場合は、デフォルト値の""がorbidに割り当てられます。ORBのいずれかが空文字列のorbidで作成されている場合、登録したポートがすべて返されます。

orblist -serverid server-id | -applicationName application-name

サーバー上に定義されたORBのORBIdを一覧表示します。ORBIdはサーバーで作成されたORBの文字列名です。サーバーが実行されていない場合、起動されます。

shutdown -serverid server-id | -applicationName application-name

ORBDに登録されたアクティブなサーバーを停止します。このコマンドの実行中に、-serveridまたは-applicationNameパラメータで指定されたクラス内に定義されたshutdownメソッドも呼び出されてサーバー・プロセスをシャットダウンします。

startup -serverid server-id | -applicationName application-name

ORBDに登録されたサーバーを起動します。サーバーが実行されていない場合は、このコマンドでサーバーが起動されます。サーバーがすでに実行されている場合は、エラー・メッセージが表示されます。

help

サーバーでservertoolコマンドで使用できるすべてのコマンドを一覧表示します。

quit

servertoolコマンドを終了します。

7 Javaデプロイメント・ツールおよびコマンド

Javaデプロイメント・ツールおよびコマンドは、デプロイメント用にJavaアプリケーションとJavaFXアプリケーションをパッケージ化するのに使用します。

次の各項では、デプロイメント・ツールおよびコマンドについて説明します。

- pack200: pack200コマンドは、Java gzip圧縮プログラムを使用して、Java Archive (JAR)ファイルをpack200圧縮ファイルに変換する場合に使用します。

- unpack200: unpack200コマンドは、Webデプロイメント用にパック・ファイルをJARファイルに変換する場合に使用します。

- javapackager: javapackagerコマンドは、JavaアプリケーションとJavaFXアプリケーションのパッケージ化に関連するタスクを実行する場合に使用します。

pack200

pack200コマンドは、Java gzip圧縮プログラムを使用して、Java Archive (JAR)ファイルをpack200圧縮ファイルに変換する場合に使用します。

形式

pack200 [-opt... | --option=value] x.pack[.gz] JAR-file

-opt... | --option=value

オプションは任意の順序で指定できます。コマンド行またはpropertiesファイルに指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。「pack200コマンドのオプション」を参照してください。

x.pack[.gz]

出力ファイルの名前。

file.jar

入力ファイルの名前。

説明

pack200コマンドは、Java gzip圧縮プログラムを使用して、JARファイルをpack200圧縮ファイルに変換するJavaアプリケーションです。このコマンドは、JARファイルをWebデプロイメント用にpack200圧縮ファイルにパッケージ化します。pack200ファイルは高圧縮のファイルであり、直接デプロイすると帯域幅を節約し、ダウンロード時間を短縮できます。

次の例では、一般的な使用方法を示しますが、ここではmyarchive.pack.gzは、pack200コマンドのデフォルト設定で生成されます。

pack200 myarchive.pack.gz myarchive.jar

注意:

このコマンドとpackを混同しないでください。packコマンドとpack200コマンドは別々の製品です。JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。

終了ステータス

終了値(正常に完了した場合は0、エラーが発生した場合は0よりも大きい数値)が返されます。

pack200コマンドのオプション

pack200コマンドには、圧縮エンジンの設定や微調整を行うオプションが用意されています。次の例では、一般的な使用法を示します。ここでmyarchive.pack.gzは、pack200コマンドのデフォルト設定で生成されます。

pack200 myarchive.pack.gz myarchive.jar

-rまたは--repack

JARファイルをパックおよびアンパックすることで、JARファイルを生成します。生成されたファイルはjarsignerツールの入力ファイルとして使用できます。次の例では、myarchive.jarファイルをパックおよびアンパックします。

pack200 --repack myarchive-packer.jar myarchive.jar
pack200 --repack myarchive.jar

-gまたは--no-gzip

pack200ファイルを生成します。このオプションを指定するときは、適切な圧縮ツールを使用する必要があります。また、ターゲット・システムでは、対応する圧縮解除ツールを使用する必要があります。

pack200 --no-gzip myarchive.pack myarchive.jar

--gzip

(デフォルト) パック出力をgzipで事後圧縮します。

-Gまたは-—strip-debug

出力からデバッグ属性を削除します。たとえば、SourceFile、LineNumberTable、LocalVariableTable、LocalVariableTypeTableなどの属性があります。これらの属性を削除すれば、ダウンロードとインストールのサイズは小さくなる他、デバッガの機能が制限されます。

--keep-file-order

入力ファイル内のファイル順序を保存します。これはデフォルトの動作です。

-Oまたは--no-keep-file-order

すべての要素を並べ替えて転送します。また、パック・ツールはダウンロード・サイズを削減するために、JARディレクトリ名を削除します。ただし、特定のJARファイルの最適化機能(索引など)が正常に動作しない可能性があります。

-SNまたは--segment-limit=N

この値は、各アーカイブ・セグメントの予想ターゲット・サイズN (バイト単位)です。Nバイト超を必要とする単一の入力ファイルには、独立したアーカイブ・セグメントが割り当てられます。これは特殊な例ですが、値が-1の場合、すべての入力ファイルを含む単一の巨大なセグメントが生成されます。一方、値が0の場合、クラスごとにセグメントが1つずつ生成されます。アーカイブ・セグメントのサイズが大きければ大きいほど断片化は起こりにくく、圧縮率も高くなります。ただし、こうしたセグメントを処理するためには、大量のメモリーが必要になります。

各セグメントのサイズは、セグメント内で転送される入力ファイルのサイズと、このファイルの名前のサイズ、およびその他の転送プロパティによって予測されます。

デフォルトは-1です。これは、パック・ツールが単一のセグメント出力ファイルを作成することを意味します。非常に大きな出力ファイルが生成される場合には、セグメント化を使用するか、入力ファイルをより小さなJARファイルに分割することをお薦めします。

通常、この制限が課されていない10MバイトのJARパック・ファイルは、元の10%程度のサイズにパックされます。ただし、パック・ツールでより大きなJavaヒープ(セグメントの制限の約10倍)を必要とする場合もあります。

-Evalueまたは--effort=value

単一の10進数値を指定した場合、パック・ツールは、指定された圧縮率でアーカイブを圧縮します。レベル1の場合、圧縮速度は速くても圧縮率はそれほど高くありません。レベル9の場合、圧縮速度は遅くても圧縮率は高くなります。特殊な値0を指定すると、pack200コマンドは元のJARファイルを圧縮せずに直接コピーします。JSR 200標準では、すべてのアンパック・ツールはこの特殊な処理をアーカイブ全体のパススルーとして理解する必要があります。

デフォルト値は5です。この場合、標準的な時間で、適度な圧縮が行われます。

-Hvalueまたは--deflate-hint=value

デフォルト値をオーバーライドし、入力情報を保持します。ただし、転送されるアーカイブのサイズは大きくなります。指定可能な値は、true、falseまたはkeepです。

valueがtrueまたはfalseの場合、packer200コマンドは出力アーカイブ内でそれに応じたデフレーション・ヒントを設定し、アーカイブ要素の個別のデフレーション・ヒントを転送しません。

値がkeepの場合、入力JARで見つかったデフレーション・ヒントが保持されます。これはデフォルトです。

-mvalueまたは--modification-time=value

指定可能な値は、latestおよびkeepです。

値がlatestの場合、パック・ツールは元のアーカイブで使用可能なすべてのエントリ間の最終更新時刻か、そのセグメントで使用可能なすべてのエントリの最終更新時刻を特定しようとします。この単一の値はセグメントの一部として転送され、各セグメントの全エントリに適用されます。この場合、すべてのインストール・ファイルに単一の日付が設定されるという問題はありますが、アーカイブの転送サイズを少し小さくすることができます。

値がkeepの場合、入力JAR内で見つかった変更時刻が保持されます。これはデフォルトです。

-Pfileまたは--pass-file=file

ファイルを圧縮せず、バイト単位で転送するように指定します。このオプションを繰返し使用して、複数のファイルを指定できます。システム・ファイル・セパレータがJARファイル・セパレータのスラッシュ(/)に置き換えられる点を除き、パス名の変換は行われません。ファイル名は、JARファイル内の文字列と完全に一致していなければなりません。fileがディレクトリ名の場合、そのディレクトリ下のすべてのファイルが渡されます。

-U actionまたは--unknown-attribute=action

デフォルトの動作をオーバーライドします。つまり、不明な属性を含むクラス・ファイルは、指定されたactionで渡されます。actionに指定可能な値は、error、stripまたはpassです。

値がerrorの場合、pack200コマンドの操作全体に失敗し、適切な解説が表示されます。

値がstripの場合、属性が削除されます。Java仮想マシン(JVM)の必須属性を削除すると、クラス・ローダーで障害が発生する可能性があります。

値がpassの場合、クラス全体が1つのリソースとして転送されます。

-C attribute-name=layoutまたは--class-attribute=attribute-name=action

(ユーザー定義属性) 「—Dattribute-name=layout」の説明を参照してください。

-F attribute-name=layoutまたは--field-attribute=attribute-name=action

(ユーザー定義属性) 「—Dattribute-name=layout」の説明を参照してください

-Mattribute-name=layoutまたは--method-attribute=attribute-name=action

(ユーザー定義属性) 「—Dattribute-name=layout」の説明を参照してください

—D attribute-name=layoutまたは--code-attribute=attribute-name=action

(ユーザー定義属性) クラス・エンティティにclass-attribute、field-attribute、method-attribute、code-attributeなどの属性のレイアウトを指定できます。attribute-nameには、レイアウトまたはアクションが定義される属性の名前を指定します。actionに指定可能な値は、some-layout-string、error、stripまたはpassです。

some-layout-string: レイアウト言語は、JSR 200の仕様で定義されています(例: --class-attribute=SourceFile=RUH)。

値がerrorの場合、pack200の操作に失敗し、解説が表示されます。

値がstripの場合、属性が出力から削除されます。JVMの必須属性を削除すると、クラス・ローダーで障害が発生する可能性があります。たとえば、--class-attribute=CompilationID=passを指定すると、パック・ツールで追加のアクションが実行されずに、この属性を含むクラス・ファイルが渡されます。

値がpassの場合、クラス全体が1つのリソースとして転送されます。

-f pack.propertiesまたは--config-file=pack.properties

パック・ツールを初期化するためのJavaプロパティが含まれている構成ファイルをコマンド行に指定できることを示します。

pack200 -f pack.properties myarchive.pack.gz myarchive.jar
more pack.properties
# Generic properties for the packer.
modification.time=latest
deflate.hint=false
keep.file.order=false
# This option will cause the files bearing new attributes to
# be reported as an error rather than passed uncompressed.
unknown.attribute=error
# Change the segment limit to be unlimited.
segment.limit=-1

-vまたは--verbose

最小限のメッセージを出力します。このオプションを複数指定すると、より詳細なメッセージが作成されます。

-qまたは--quiet

メッセージを表示せずに動作します。

-l filenameまたは--log-file=filename

出力メッセージのログ・ファイルを指定します。

-?、-hまたは--help

このコマンドに関するヘルプ情報を出力します。

-Vまたは--version

このコマンドに関するバージョン情報を出力します。

-Joption

指定されたオプションをJava仮想マシンに渡します。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。

unpack200

unpack200コマンドは、Webデプロイメント用にパック・ファイルをJARファイルに変換する場合に使用します。

形式

unpack200 [ options  ] input-file JAR-file

options

コマンド行オプションです。「unpack200コマンドのオプション」を参照してください。

input-file

入力ファイルの名前です。入力ファイルは、pack200 gzipファイルまたはpack200ファイルです。また、0を設定すればpack200で作成されたJARファイルも入力ファイルとして使用できます。この場合、入力ファイルの内容がpack200マーカーとともに出力JARファイルにコピーされます。

JAR-file

出力JARファイル名。

説明

unpack200コマンドは、Webデプロイメント用にpack200で作成されたパック・ファイルをJARファイルに変換するネイティブ実装です。一般的な使用例を次に示します。次の例では、unpack200コマンドのデフォルト設定で、myarchive.pack.gzからmyarchive.jarファイルが作成されます。

unpack200 myarchive.pack.gz myarchive.jar

unpack200コマンドのオプション

-Hまたは--deflate -hint=value

JARファイル内のすべてのエントリにtrue、false、keepとしてデフレーションを設定します。デフォルト・モードはkeepです。値がtrueまたはfalseの場合、--deflate=hintオプションはデフォルトの動作をオーバーライドして、出力JARファイル内のすべてのエントリにデフレーション・モードを設定します。

-rまたは--remove-pack-file

入力パック・ファイルを削除します。

-vまたは--verbose

最小限のメッセージを表示します。このオプションを複数指定すると、より詳細なメッセージが表示されます。

-qまたは--quiet

メッセージを表示せずに動作します。

-l filenameまたは--log-file=filename

出力メッセージのログが記録されるログ・ファイルを指定します。

-?、-hまたは--help

unpack200コマンドに関するヘルプ情報を出力します。

-Vまたは--version

unpack200コマンドに関するバージョン情報を出力します。

-Joption

Java仮想マシンにオプションを渡します。ここでoptionは、Javaアプリケーションランチャのリファレンス・ページに記載されているいずれかのオプションです。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。

注

このコマンドとunpackコマンドを混同しないでください。これらは別製品です。

JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。

終了ステータス

終了値(正常に完了した場合は0、エラーが発生した場合は0よりも大きい値)が返されます。

javapackager

javapackagerコマンドは、JavaアプリケーションとJavaFXアプリケーションのパッケージ化に関連するタスクを実行する場合に使用します。

形式

javapackager command [options]

command

実行するタスク。「javapackagerコマンドのコマンド」を参照してください。

options

空白で区切られた1つ以上のコマンド・オプション。「createbssコマンドのオプション」、「createjarコマンドのオプション」、「deployコマンドのオプション」、「makeallコマンドのオプション」および「signjarコマンドのオプション」を参照してください。

注意:

javapackagerコマンドは、Oracle Solarisでは使用できません。

説明

Javaパッケージャ・ツールでは、配信用にJavaアプリケーションとJavaFXアプリケーションのコンパイル、パッケージ化および準備を行います。javapackagerコマンドは、そのコマンド行バージョンです。使用可能なAntタスクについては、『Java Platform, Standard Editionデプロイメント・ガイド』の「JavaFX Antタスク」を参照してください。

自己完結型アプリケーションについて、JDK 9用のJavaパッケージャでは、jlinkツールによって生成されたJDK 9ランタイム・イメージとともにアプリケーションをパッケージ化します。JDK 8またはJDK 7 JREをアプリケーションとパッケージ化するには、JDK 8 Javaパッケージャを使用します。

javapackagerコマンドのコマンド

コマンド行から次のコマンドを、後にコマンドのオプションを指定して実行できます。

-createbss

CSSファイルをバイナリ形式に変換します。このコマンドとともに使用するオプションについては、「createbssコマンドのオプション」を参照してください。

-createjar

他のパラメータに従ってJARを生成します。このコマンドとともに使用するオプションについては、「createjarコマンドのオプション」を参照してください。

-deploy

配布用のアプリケーション・パッケージを構築します。モジュラ・アプリケーションおよび非モジュラ・アプリケーションがサポートされます。デフォルトでは、デプロイ・タスクはベース・アプリケーション・パッケージを生成します。要求された場合、自己完結型アプリケーション・パッケージを生成することもできます。このコマンドとともに使用するオプションについては、「deployコマンドのオプション」を参照してください。

自己完結型アプリケーションのバンドルには、jlinkを呼び出して作成されるカスタム・ランタイムが含まれます。JDK 9のJavaパッケージャは、アプリケーションをJDK 9ランタイム・イメージとパッケージ化します。JDK 8またはJDK 7 JREをアプリケーションとパッケージ化するには、JDK 8 Javaパッケージャを使用します。

-makeall

注意:
Javaパッケージャ・ツールの-makeallコマンドは、将来のリリースでの削除に備えてJDK 9で非推奨です。

1つの呼出しで、ほとんどの引数が事前定義されたコンパイル、createjarおよびdeployステップを実行し、すべての該当する自己完結型アプリケーション・パッケージの生成を試行します。ソース・ファイルはsrcというフォルダに配置する必要があり、生成されるファイル(JAR、JNLP、HTMLおよび自己完結型アプリケーション・パッケージ)はdistというフォルダに出力されます。このコマンドは、最小限の構成のみが可能で、可能なかぎり自動化されます。このコマンドとともに使用するオプションについては、「makeallコマンドのオプション」を参照してください。

-signjar

注意:
Javaパッケージャ・ツールの-signjarコマンドは、将来のリリースでの削除に備えてJDK 9では非推奨です。また、これは、マルチリリースJARファイルでも動作しません。かわりに、jarsignerツールを使用してJARファイルに署名します。

指定された証明書でJARファイルに署名します。このコマンドとともに使用するオプションについては、「signjarコマンドのオプション」を参照してください。

createbssコマンドのオプション

-outdir dir

生成された出力ファイルを受け取るディレクトリの名前。

-srcdir dir

パックするファイルのベース・ディレクトリ。

-srcfiles files

srcdir内のファイルのリスト。省略すると、srcdir (この場合は必須の引数)にあるすべてのファイルが使用されます。

createjarコマンドのオプション

-appclass app-class

実行するアプリケーション・クラスの修飾名。

-argument arg

JNLPファイルに<fx:argument>要素として挿入する名前なし引数。

-classpath files

依存するJARファイルの名前のリスト。

-manifestAttrs manifest-attributes

追加のマニフェスト属性の名前と値のリスト。構文:

"name1=value1,name2=value2,..."

-nocss2bin

パッケージャは、CSSファイルをバイナリ形式に変換せずにJARファイルにコピーします。

-noembedlauncher

指定した場合、パッケージャはJavaFX起動クラスをJARファイルに追加しません。

-outdir dir

生成された出力ファイルを受け取るディレクトリの名前。

-outfile filename

生成されるファイルの(拡張子なしの)名前。

-paramfile file

アプリケーションに渡される名前付きパラメータとそのデフォルト値が含まれるプロパティ・ファイル。

-preloader preloader-class

実行するJavaFXプリローダー・クラスの修飾名。このオプションは、JavaFXアプリケーションにのみ使用します。ヘッドレス・アプリケーションを含め、Javaアプリケーションには使用しないでください。

-runtimeversion version

必須のJavaFXランタイムのバージョンを指定します。

-srcdir dir

パックするファイルのベース・ディレクトリ。

-srcfiles files

srcdir内のファイルのリスト。省略すると、srcdir (この場合は必須の引数)にあるすべてのファイルがパックされます。

deployコマンドのオプション

--add-modules modulename[,modulename...]

初期モジュールに加えて解決するルート・モジュールを指定します。

-allpermissions

指定した場合、アプリケーションにはJNLPファイル内のすべてのセキュリティ権限が必要となります。

-appclass app-class

実行するアプリケーション・クラスの修飾名。

-argument arg

JNLPファイル内の<fx:argument>要素に挿入する名前なし引数。

-Bbundler-argument=value

自己完結型アプリケーションのパッケージ化に使用するバンドラへの情報を指定します。各バンドラの引数については、「自己完結型アプリケーション・バンドラの引数」を参照してください。

-callbacks callback-methods

生成されたHTMLにユーザー・コールバック・メソッドを1つ以上指定します。形式は次のとおりです。

"name1:value1,name2:value2,..."

-description description

アプリケーションの説明。

-embedjnlp

指定した場合、HTMLドキュメントにJNLPファイルが埋め込まれます。

-embedCertificates

指定した場合、JNLPファイルに証明書が埋め込まれます。

-height height

アプリケーションの高さ。

-htmlparamfile file

生成されるアプリケーションをブラウザ内で実行するときのパラメータが含まれるプロパティ・ファイル。

-isExtension

指定した場合、srcfilesは拡張ファイルとして処理されます。

--limit-modules modulename[,modulename...]

参照可能なモジュールの領域を制限します。

-m modulename [/mainclass]または--module modulename [/mainclass]

解決する初期モジュールと、モジュールで指定されていない場合に実行するメイン・クラスの名前を指定します。

-p module pathまたは--module-path module path

ディレクトリのコロン(:)区切りリスト(各ディレクトリはモジュールのディレクトリです)。

-name name

アプリケーションの名前。

-native type

typeがjnlpに設定されている場合、Java Web Startアプリケーションに必要なファイルを生成します。それ以外の場合、自己完結型アプリケーション・バンドルを生成します(可能な場合)。-Bオプションを使用して、使用されているバンドラへの引数を指定します。typeを指定した場合、このタイプのバンドルのみが作成されます。タイプを指定しない場合、allが使用されます。

typeには、次の値が有効です。

- jnlp: Java Web Startアプリケーションの.jnlpおよび.htmlファイルを生成します。

- all: 実行されているプラットフォームのインストーラをすべて実行し、そのアプリケーションのディスク・イメージを作成します。typeが指定されていない場合、この値が使用されます。

- installer: 実行されているプラットフォームのインストーラをすべて実行します。

- image: アプリケーションのディスク・イメージを作成します。
LinuxおよびWindows: イメージはインストールされるディレクトリです。

macOS: イメージは.appファイルです。

- exe: Windows .exe パッケージを生成します。

- msi: Windowsインストーラ・パッケージを生成します。

- dmg: macOS用のDMGファイルを生成します。

- pkg: macOS用の.pkgパッケージを生成します。

- mac.appStore: Mac App Store用のパッケージを生成します。

- rpm: Linux用のRPMパッケージを生成します。

- deb: Linux用のDebianパッケージを生成します。

-nosign

LinuxおよびmacOS: 指定した場合、自己完結型アプリケーションのために生成されるバンドルは、バンドラによって署名されません。署名をサポートするバンドラのためのデフォルトは、署名キーが正しく構成された場合にバンドルに署名することです。この属性は、署名をサポートしないバンドラでは無視されます。

-outdir dir

生成された出力ファイルを受け取るディレクトリの名前。

-outfile filename

生成されるファイルの(拡張子なしの)名前。

-paramfile file

アプリケーションに渡される名前付きパラメータとそのデフォルト値が含まれるプロパティ・ファイル。

-preloader preloader-class

実行するJavaFXプリローダー・クラスの修飾名。このオプションは、JavaFXアプリケーションにのみ使用します。ヘッドレス・アプリケーションを含め、Javaアプリケーションには使用しないでください。

-srcdir dir

パックするファイルのベース・ディレクトリ。

-srcfiles files

srcdir内のファイルのリスト。省略すると、srcdir (この場合は必須の引数)にあるすべてのファイルが使用されます。

--strip-native-commands [true|false]

java.exeなどのコマンド行ツールを、自己完結型アプリケーションを使用してパッケージ化するために生成されるJavaランタイムから削除します。デフォルトはtrueです。ランタイムにツールを保存するには、falseを指定します。

-templateId

テンプレート処理を行うアプリケーションのアプリケーションID。

-templateInFilename

HTMLテンプレート・ファイルの名前。プレースホルダの形式は次のとおりです。

#XXXX.YYYY(APPID)#

APPIDはアプリケーションの識別子で、XXXXは次のいずれかです。

- DT.SCRIPT.URL
配備ツールキット内のdtjava.jsの場所。デフォルトの場所は次のとおりです

http://java.com/js/dtjava.js.

- DT.SCRIPT.CODE
配備ツールキットのdtjava.jsを組み込むスクリプト要素。

- DT.EMBED.CODE.DYNAMIC
アプリケーションを特定のプレースホルダに埋め込むコード。コードは、function()メソッド内にラップする必要があります。

- DT.EMBED.CODE.ONLOAD
onloadフックを使用してアプリケーションをWebページに埋め込むために必要なすべてのコード(dtjava.jsの組込みを除く)。

- DT.LAUNCH.CODE
アプリケーションを起動するために必要なコード。コードは、function()メソッド内にラップする必要があります。

-templateOutFilename

テンプレートから生成されるHTMLファイルの名前。

-title title

アプリケーションのタイトル。

-updatemode update-mode

JNLPファイルの更新モードを設定します。

-vendor vendor

アプリケーションのベンダー。

-width width

アプリケーションの幅。

makeallコマンドのオプション

注意:
Javaパッケージャ・ツールの-makeallコマンドは、将来のリリースでの削除に備えてJDK 9で非推奨です。

-appclass app-class

実行するアプリケーション・クラスの修飾名。

-classpath files

依存するJARファイルの名前のリスト。

-height height

アプリケーションの高さ。

-name name

アプリケーションの名前。

-preloader preloader-class

実行するJavaFXプリローダー・クラスの修飾名。このオプションは、JavaFXアプリケーションにのみ使用します。ヘッドレス・アプリケーションを含め、Javaアプリケーションには使用しないでください。

-v

詳細出力を有効にします。

-width width

アプリケーションの幅。

signjarコマンドのオプション

注意:
Javaパッケージャ・ツールの-signjarコマンドは、将来のリリースでの削除に備えてJDK 9では非推奨です。また、これは、マルチリリースJARファイルでも動作しません。jarsignerツールを使用してJARファイルに署名します。

-alias key-alias

キーの別名。

-keyPass password

キーを復元するためのパスワード。

-keyStore file

キーストア・ファイルの名前。

-outdir dir

生成された出力ファイルを受け取るディレクトリの名前。

-storePass password

キーストアの整合性を確認したり、ロックを解除したりするためのパスワード。

-storeType type

キーストアのタイプ。デフォルト値はjksです。

-srcdir dir

パックするファイルのベース・ディレクトリ。

-srcfiles files

srcdir内のファイルのリスト。省略すると、srcdir (この場合は必須の引数)にあるすべてのファイルがパックされます。

自己完結型アプリケーション・バンドラの引数

-deployコマンドの-Bbundler-argument=valueオプションは、自己完結型アプリケーションの生成時に使用します。このオプションを使用すると、自己完結型アプリケーションの作成に使用されるバンドラの引数を設定できます。複数の引数を設定するには、引数ごとにこのオプションのインスタンスを渡します。各バンドラ・タイプに、独自の引数セットがあります。

次の各項では、使用可能なバンドラの有効な引数について説明します。

- 一般的なバンドラ引数

- macOSアプリケーション・バンドラ引数

- macOS DMG (ディスク・イメージ)バンドラ引数

- macOS PKGバンドラ引数

- Mac App Storeバンドラ引数

- Linux Debianバンドラ引数

- Linux RPMバンドラ引数

- Windows EXEバンドラ引数

- Windows MSIバンドラ引数

一般的なバンドラ引数

一般的なバンドラ引数は、すべてのバンドラに対して有効です。

appVersion=version

アプリケーション・パッケージのバージョン。一部のバンドラでは、バージョン文字列の形式が制限されます。

arguments=option=value

起動時にアプリケーションに渡される引数。引数リストは引用符で囲みます。複数のオプションを渡すには、次のように、オプション/値ペアを空白で区切ります。

-Barguments="this.is.a.test=tru one.more.arg=affirmative"

classPath=path

アセンブルされたアプリケーション・ディレクトリへの相対的なクラス・パス。一般的に、パスはJARファイル・マニフェストから抽出され、他のjavapackagerコマンドを使用している場合は設定する必要はありません。

dropinResourcesRoot=directory

バンドラ固有のドロップイン・リソースを検索するディレクトリ。たとえば、macOSの場合、現在のディレクトリでInfo.plistファイルを検索するには、次を使用します。

-BdropinResourcesRoot=.

ファイルが現在のディレクトリで見つかります: package/macosx/Info.plist。

icon=path

アプリケーション・ランチャおよびその他の支援ツールに使用されるデフォルト・アイコンの場所。

Linux: 形式は.pngである必要があります。

macOS: 形式は.icnsである必要があります。

Windows: 形式は.icoである必要があります。

identifier=value

mac.CFBundleIdentifierなど、他のプラットフォーム固有の値に使用されるデフォルト値。DNS順序の反転をお薦めします(例: com.example.application.my-application)。

jvmOptions=option

アプリケーションの実行時にJVMに渡されるオプション。javaコマンドに有効なオプションを使用できます。複数のオプションを渡すには、次の例に示すように-Bオプションの複数インスタンスを使用します。

-BjvmOptions=-Xmx128m -BjvmOptions=-Xms128m

jvmProperties=property=value

アプリケーションの実行時にVMに渡されるJavaシステム・プロパティ。javaコマンドの-Dオプションに有効なプロパティを使用できます。プロパティ名とそのプロパティの値の両方を指定します。複数のプロパティを渡すには、次の例に示すように-Bオプションの複数インスタンスを使用します。

-BjvmProperties=apiUserName=example -BjvmProperties=apiKey=abcdef1234567890

mainJar=filename

アプリケーションのメイン・クラスを含むJARファイルの名前。一般的に、ファイル名はJARファイル・マニフェストから抽出され、他のjavapackagerコマンドを使用している場合は設定する必要はありません。

preferencesID=node

ユーザーがオーバーライドできるJVMオプションを確認するために調べるプリファレンス・ノード。指定したノードは、オプション-Dapp.preferences.idとして実行時にアプリケーションに渡されます。この引数は、userJVMOptions引数とともに使用されます。

runtime=path

Java Web Startアプリケーションとともに使用するJREまたはJDKの場所で、-nativeオプションがjnlpに設定されている場合のみ有効です。

userJvmOptions=option=value

ユーザーがオーバーライドできるJVMオプション。javaコマンドに有効なオプションを使用できます。オプション名とそのオプションの値の両方を指定します。複数のオプションを渡すには、次の例に示すように-Bオプションの複数インスタンスを使用します。

-BuserJvmOptions=-Xmx=128m -BuserJvmOptions=-Xms=128m

macOSアプリケーション・バンドラ引数

mac.category=category

アプリケーションのカテゴリ。カテゴリは、Apple Developer Webサイトにあるカテゴリ・リスト内に含まれている必要があります。

mac.CFBundleIdentifier=value

CFBundleIdentifierの情報plistに格納されている値。この値は、グローバルに一意である必要があり、文字、数字、ドットおよびダッシュのみを含む必要があります。DNS順序の反転をお薦めします(例: com.example.application.my-application)。

mac.CFBundleName=name

macOSメニュー・バーに表示されるアプリケーションの名前。16文字未満の名前をお薦めします。デフォルトはname属性です。

mac.CFBundleVersion=value

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。値は、appVersion引数の値と異なる可能性があります。appVersion引数が有効な値で指定され、mac.CFBundleVersion引数が指定されていない場合、appVersion値が使用されます。どちらの引数も指定されていない場合、100がバージョン番号として使用されます。

mac.signing-key-developer-id-app=key

開発者IDまたはGatekeeper署名に使用する署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。鍵を特定できない場合、アプリケーションは署名されません。

mac.bundle-id-signing-prefix=prefix

plistまたは既存の署名がないバイナリがバンドル内に見つかった場合に署名済バイナリに適用される接頭辞。

macOS DMG (ディスク・イメージ)バンドラ引数

ディスク・イメージがマウント可能になる前に、macOS DMGインストーラは、licenseFileによって指定されているライセンス・ファイル(指定されている場合)を表示します。

licenseFile=path

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスは、パッケージ・アプリケーション・リソースに相対的です(例: -BlicenseFile=COPYING)。

systemWide=boolean

使用対象のドラッグしてインストールするターゲットを示すフラグ。アプリケーション・フォルダを表示するには、trueに設定します。デスクトップ・フォルダを表示するには、falseに設定します。デフォルトはtrueです。

mac.CFBundleVersion=value

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。値は、appVersion引数の値と異なる可能性があります。appVersion引数が有効な値で指定され、mac.CFBundleVersion引数が指定されていない場合、appVersion値が使用されます。どちらの引数も指定されていない場合、100がバージョン番号として使用されます。

mac.dmg.simple=boolean

AppleScriptコードの実行に依存するDMGカスタマイズ手順をスキップするかどうかを示すフラグ。trueに設定して、手順をスキップします。trueに設定されている場合、ディスク・ウィンドウにバックグラウンド・イメージがないため、アイコンが所定の位置に移動しません。systemWide引数もtrueに設定されている場合、ルート・アプリケーション・フォルダのシンボリック・リンクがDMGファイルに追加されます。systemWide引数がfalseに設定されている場合、アプリケーションのみがDMGファイルに追加され、デスクトップのリンクは追加されません。

macOS PKGバンドラ引数

macOS PKGインストーラは、ウィザードを示し、licenseFileによって指定されているライセンス・ファイルをウィザード内のページの1つとして表示します。ユーザーはアプリケーションをインストールする前に条件に同意する必要があります。

licenseFile=path

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスは、パッケージ・アプリケーション・リソースに相対的です(例: -BlicenseFile=COPYING)。

mac.signing-key-developer-id-installer=key

開発者IDまたはGatekeeper署名に使用する署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。鍵を特定できない場合、アプリケーションは署名されません。

mac.CFBundleVersion=value

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。値は、appVersion引数の値と異なる可能性があります。appVersion引数が有効な値で指定され、mac.CFBundleVersion引数が指定されていない場合、appVersion値が使用されます。どちらの引数も指定されていない場合、100がバージョン番号として使用されます。

Mac App Storeバンドラ引数

mac.app-store-entitlements=path

アプリケーションが動作する資格を含むファイルの場所。ファイルは、Appleによって指定されている形式である必要があります。ファイルへのパスは、絶対条件で指定することも、javapackagerの呼出しに対して相対的に指定することもできます。資格を指定しない場合、アプリケーションは、通常のアプレット・サンドボックスよりも厳しいサンドボックスで動作し、ネットワーク・ソケットおよびすべてのファイルへのアクセスが拒否されます。

mac.signing-key-app=key

Mac App Storeのアプリケーション署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。鍵を特定できない場合、アプリケーションは署名されません。

mac.signing-key-pkg=key

Mac App Storeのインストーラ署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。鍵を特定できない場合、アプリケーションは署名されません。

mac.CFBundleVersion=value

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。値は、appVersion引数の値と異なる可能性があります。appVersion引数が有効な値で指定され、mac.CFBundleVersion引数が指定されていない場合、appVersion値が使用されます。どちらの引数も指定されていない場合、100がバージョン番号として使用されます。このバージョンが既存のアプリケーションのアップグレードである場合、値は以前のバージョン番号より大きくする必要があります。

Linux Debianバンドラ引数

licenseFile引数によって指定されているライセンス・ファイルは、すべてのケースにおいてユーザーに示されませんが、ファイルはアプリケーション・メタデータに含まれています。

category=category

アプリケーションのカテゴリ。例については、『Desktop Menu Specification』の「Registered Categories」を参照してください。

copyright=string

アプリケーションのコピーライト文字列。この引数は、Debianメタデータで使用されます。

email=address

DebianのMaintainerフィールドで使用される電子メール・アドレスです。

licenseFile=path

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスは、パッケージ・アプリケーション・リソースに相対的です(例: -BlicenseFile=COPYING)。

licenseType=type

-BlicenseType=Proprietaryまたは"-BlicenseType=GPL v2 + Classpath Exception"などのライセンス・タイプの短縮名。

vendor=value

アプリケーションを提供する会社、組織または個人。この引数は、DebianのMaintainerフィールドで使用されます。

Linux RPMバンドラ引数

category=category

アプリケーションのカテゴリ。例については、『Desktop Menu Specification』の「Registered Categories」を参照してください。

licenseFile=path

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスは、パッケージ・アプリケーション・リソースに相対的です(例: -BlicenseFile=COPYING)。

licenseType=type

-BlicenseType=Proprietaryまたは"-BlicenseType=GPL v2 + Classpath Exception"などのライセンス・タイプの短縮名。

vendor=value

アプリケーションを提供する会社、組織または個人。

Windows EXEバンドラ引数

copyright=string

アプリケーションのコピーライト文字列。文字列は、100文字未満の単一行である必要があります。この引数は、様々な実行可能ファイルおよびレジストリ・メタデータで使用されます。

installdirChooser=boolean

アプリケーションがインストールされるディレクトリをユーザーが選択できるかどうかを示すフラグ。ユーザーがディレクトリを選択するためのダイアログボックスを表示する場合は、trueに設定します。systemWide引数で指定したディレクトリにアプリケーションをインストールする場合は、falseに設定します。デフォルトはfalseです。

licenseFile=path

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスは、パッケージ・アプリケーション・リソースに相対的です(例: -BlicenseFile=COPYING)。

menuHint=boolean

ショートカットがスタート・メニューまたはスタート画面にインストールされているかどうかを示すフラグ。ショートカットをインストールするには、trueに設定します。デフォルトはtrueです。

shortcutHint=boolean

ショートカットがデスクトップに配置されているかどうかを示すフラグ。ショートカットをデスクトップに追加するには、trueに設定します。デフォルトは、falseです。

systemWide=boolean

アプリケーションのインストール先がProgram Filesディレクトリか、ユーザーのホーム・ディレクトリ内の標準の場所かを示すフラグ。アプリケーションをProgram Filesにインストールする場合は、trueに設定します。アプリケーションをユーザーのホーム・ディレクトリにインストールするには、falseに設定します。デフォルトは、falseです。

win.menuGroup=group

menuHintがtrueの場合に、アプリケーションをインストールするメニュー・グループ。menuHintがfalseの場合に、この引数は無視されます。

vendor=value

アプリケーションを提供する会社、組織または個人。この引数は、様々な実行可能ファイルおよびレジストリ・メタデータで使用されます。

Windows MSIバンドラ引数

installdirChooser=boolean

アプリケーションがインストールされるディレクトリをユーザーが選択できるかどうかを示すフラグ。ユーザーがディレクトリを選択するためのダイアログボックスを表示する場合は、trueに設定します。systemWide引数で指定したディレクトリにアプリケーションをインストールする場合は、falseに設定します。デフォルトはfalseです。

licenseFile=path

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスは、パッケージ・アプリケーション・リソースに相対的です(例: -BlicenseFile=COPYING)。

menuHint=boolean

ショートカットがスタート・メニューまたはスタート画面にインストールされているかどうかを示すフラグ。ショートカットをインストールするには、trueに設定します。デフォルトはtrueです。

shortcutHint=boolean

ショートカットがデスクトップに配置されているかどうかを示すフラグ。ショートカットをデスクトップに追加するには、trueに設定します。デフォルトは、falseです。

systemWide=boolean

アプリケーションのインストール先がProgram Filesディレクトリか、ユーザーのホーム・ディレクトリ内の標準の場所かを示すフラグ。アプリケーションをプログラム・ファイルにインストールするには、trueに設定します。アプリケーションをユーザーのホーム・ディレクトリにインストールするには、falseに設定します。デフォルトはtrueです。

win.menuGroup=group

menuHintがtrueの場合に、アプリケーションをインストールするメニュー・グループ。menuHintがfalseの場合に、この引数は無視されます。

vendor=value

アプリケーションを提供する会社、組織または個人。この引数は、様々な実行可能ファイルおよびレジストリ・メタデータで使用されます。

非推奨のオプション

次のオプションは、パッケージ化ツールで使用されておらず、存在していても無視されます。

-embedCertificates

指定した場合、JNLPファイルに証明書が埋め込まれます。非推奨の–deployオプション。

-noembedlauncher

指定した場合、パッケージャはJavaFX起動クラスをJARファイルに追加しません。非推奨。

注

- -vオプションは、任意のタスク・コマンドで詳細出力を有効にするために使用できます。

- コマンドに-srcdirオプションを指定できる場合は、このオプションを複数回使用できます。-srcfilesオプションを指定した場合は、その引数に指定したファイルが、先行する-srcdirオプションに指定した場所で検索されます。-srcdirが-srcfilesの前に指定されていない場合は、javapackagerコマンドの実行元となるディレクトリが使用されます。

例

例1   -createjarコマンドの使用

javapackager -createjar -appclass package.ClassName
-srcdir classes -outdir out -outfile outjar -v

classesディレクトリの内容をoutjar.jarにパッケージ化し、アプリケーション・クラスをpackage.ClassNameに設定します。

例2   -deployコマンドの使用

javapackager -deploy -outdir outdir -outfile outfile -width 34 -height 43
-name AppName -appclass package.ClassName -v -srcdir compiled

package.ClassNameによって起動され、34 x 43ピクセルの寸法を持つアプリケーションAppNameのために、outfile.jnlpファイルおよび対応するoutfile.htmlファイルをoutdirに生成します。

例3   -makeallコマンドの使用

注意:
Javaパッケージャ・ツールの-makeallコマンドは、将来のリリースでの削除に備えてJDK 9で非推奨です。

javapackager -makeall -appclass brickbreaker.Main -name BrickBreaker -width 600
-height 600

コンパイル、createjarおよびdeployを含むすべてのパッケージ化作業を実行します。

例4   -signjarコマンドの使用

注意:
Javaパッケージャ・ツールの-signjarコマンドは、将来のリリースでの削除に備えてJDK 9では非推奨です。また、これは、マルチリリースJARファイルでも動作しません。jarsignerツールを使用してJARファイルに署名します。

javapackager -signJar -outdir dist -keyStore sampleKeystore.jks -storePass ****
-alias duke -keypass **** -srcdir dist

distディレクトリ内のすべてのJARファイルに署名し、指定された別名、keyStoreおよびstorePassを使って証明書を添付し、署名されたJARファイルをdistディレクトリに再び配置します。

例5   バンドラ引数を指定した-deployコマンドの使用

Linux:

自己完結型アプリケーションとしてBrickBreakerアプリケーションを実行するためのネイティブLinux Debianパッケージを生成します。

javapackager -deploy -native deb -Bcategory=Education -BjvmOptions=-Xmx128m
-BjvmOptions=-Xms128m -outdir packages -outfile BrickBreaker -srcdir dist
-srcfiles BrickBreaker.jar -appclass brickbreaker.Main -name BrickBreaker
-title "BrickBreaker demo"

Windows:

自己完結型アプリケーションとしてBrickBreakerアプリケーションを実行するためのネイティブWindows EXEパッケージを生成します。

javapackager -deploy -native exe -BsystemWide=true -BjvmOptions=-Xmx128m
-BjvmOptions=-Xms128m -outdir packages -outfile BrickBreaker -srcdir dist
-srcfiles BrickBreaker.jar -appclass brickbreaker.Main -name BrickBreaker
-title "BrickBreaker demo"

8 Java Web Startツール

Java Web Startのコマンドおよびオプションは、ネットワーク上でホストされているJavaアプリケーションとJavaアプレットを起動するリファレンス実装を起動するのに使用します。

次の項では、Java Web Startのコマンドおよびオプションについて説明します。

- javaws: javawsツールのコマンドとそのオプションは、Java Web Startを起動する場合に使用します。

javaws

javawsツールのコマンドとそのオプションは、Java Web Startを起動する場合に使用します。

形式

javaws [run-options] jnlp

javaws [control-options]

run-options

run-optionsは、任意の順序で指定できます。「javawsコマンドの実行オプション」を参照してください。

jnlp

これは、Java Network Launching Protocol (JNLP)ファイルのパスまたはURLのどちらかです。

control-options

control-optionsは、任意の順序で指定できます。「javawsコマンドの制御オプション」を参照してください。

説明

注意:

javawsコマンドは、Oracle Solarisでは使用できません。

javawsコマンドは、JNLPファイルのリファレンス実装であるJava Web Startを起動します。Java Web Startは、ネットワーク上で動作するJavaアプリケーションおよびアプレットを起動します。

JNLPファイルが指定されている場合、javawsコマンドはJNLPファイルに指定されたJavaアプリケーションまたはアプレットを起動します。

javawsコマンドには、現在のリリースでサポートされている一連のオプションがあります。ただし、これらのオプションは将来のリリースでは削除される可能性があります。

ユーザー・キャッシュ、システム・キャッシュおよびdeployment.propertiesファイルの詳細は、『Java Platform, Standard Editionデプロイメント・ガイド』を参照してください。

javawsコマンドの実行オプション

-verbose

追加の出力を表示します。

-offline

オフライン・モードでアプリケーションを実行します。

-system

アプリケーションをシステム・キャッシュのみから実行します。

-Xnosplash

スプラッシュ画面を表示せずに実行します。

-Joption

Java仮想マシン(JVM)にオプションを渡します(optionは、Javaアプリケーション・ランチャのリファレンス・ページに記載されているいずれかのオプションです)。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。「java」を参照してください。

-wait

javaプロセスを起動し、終了するのを待機します。アプリケーションが終了するまで、javawsツール・プロセスは終了しません。Windowsプラットフォーム上では、このオプションは説明したとおりに機能しません。

-open arguments

JNLPファイル内の引数を-open argumentsに置き換えます。

—print arguments

JNLPファイル内の引数を-print argumentsに置き換えます。

javawsコマンドの制御オプション

-viewer

Javaコントロール・パネルでキャッシュ・ビューアを表示します。

-userConfig property-name

指定された配備プロパティをクリアします。

-userConfig property-name property-value

指定された配備プロパティを指定された値に設定します。

-clearcache

インストールされていないすべてのアプリケーションをキャッシュから削除します。

-uninstall

キャッシュからすべてのアプリケーションを削除します。

-uninstall jnlp file

キャッシュからアプリケーションを削除します。

-import import-options jnlp-file

キャッシュにアプリケーションをインポートします。使用可能なオプションのリストおよび説明は、「javawsコマンドのインポート・オプション」を参照してください。

javawsコマンドのインポート・オプション

-silent

ユーザー・インタフェースを使用せずに、サイレント・モードでインポートします。

-system

システム・キャッシュにアプリケーションをインポートします。

-codebase url

指定したコード・ベースからリソースを取得します。

-shortcut

ユーザーがプロンプトで許可した場合にショートカットをインストールします。このオプションは、-silentオプションと一緒に使用しないと効果がありません。

-association

ユーザーがプロンプトで許可した場合にアソシエーションをインストールします。このオプションは、-silentオプションと一緒に使用しないと効果がありません。

注意:

javaws -shortcut -uninstallコマンドは、アソシエーションと実装の両方を削除します。

9 モニタリングのツールおよびコマンド

Java仮想マシン(JVM)のモニタリングのツールおよびコマンドは、JavaアプリケーションとJVMをモニターして管理するのに使用します。

注意:

試験的と指定されているツールは、サポート対象外なので、将来のJDKリリースで使用できなくなる可能性があります。

次の各項では、JavaアプリケーションとJVMをモニターして管理するのに使用されるJDKのツールおよびコマンドについて説明します。

- jconsole: jconsoleコマンドは、Javaアプリケーションをモニターして管理するためにグラフィカル・コンソールを起動する場合に使用します。

- jps: 試験的 jpsコマンドは、ターゲット・システム上で計測されたJVMをリストする場合に使用します。

- jstat: 試験的 jstatコマンドは、JVMの統計情報をモニターする場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jstatd: 試験的 jstatdコマンドは、計測されたJava HotSpot VMの作成および終了をモニターする場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jmc: jmcコマンドとそのオプションは、Java Mission Controlを起動する場合に使用します。Java Mission Controlは、プロファイリング、モニタリングおよび診断ツールのスイートです。

jconsole

jconsoleコマンドは、Javaアプリケーションをモニターして管理するためにグラフィカル・コンソールを起動する場合に使用します。

形式

jconsole [-interval=n] [-notile] [-plugin path] [-version] [connection ... ] [-J input arguments]

jconsole -help

-interval

更新間隔をn秒に設定します(デフォルトは4秒)。

-notile

複数の接続の場合、ウィンドウをタイル表示しません。

-pluginpath path

jconsoleがプラグインを探すために使用するパスを指定します。プラグインのpathには、プラグインごとに1行ずつ含まれているMETA-INF/services/com.sun.tools.jconsole.JConsolePluginという名前のプロバイダ構成ファイルを含めてください。この行は、com.sun.tools.jconsole.JConsolePluginクラスを実装するクラスの完全修飾クラス名を指定します。

-version

プログラム・バージョンを出力します。

connection = pid | host:port | jmxURL

- pid値は、ターゲット・プロセスのプロセスIDです。JVMは、jconsoleコマンドを実行しているユーザーIDと同じユーザーIDを使用して実行する必要があります。

- host:port値は、JVMが稼働しているホスト・システムの名前と、JVMの起動時にシステム・プロパティcom.sun.management.jmxremote.portで指定したポート番号です。

- jmxUrl値は、JMXServiceURLに記述されている接続先のJMXエージェントのアドレスです。

-J input arguments

input argumentsをjconsoleコマンドが実行されるJVMに渡します。

-helpまたは--help

コマンドのヘルプ・メッセージを表示します。

説明

jconsoleコマンドは、ローカル・マシンまたはリモート・マシン上のJavaアプリケーションと仮想マシンのモニターと管理を行うグラフィカル・コンソール・ツールを起動します。

Windowsでは、jconsoleコマンドはコンソール・ウィンドウと関連付けられていません。ただし、jconsoleコマンドが失敗すると、エラー情報を示すダイアログ・ボックスが表示されます。

jps

jpsコマンドは、ターゲット・システム上で計測されたJVMをリストする場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

形式

jps [ -q ] [ -mlvV ][hostid ]

jps [ -help ]

-q

クラス名、JARファイル名およびmainメソッドに渡される引数の出力を抑制し、ローカルJVM識別子のみのリストを生成します。

-mlvV

- -mは、mainメソッドに渡される引数を表示します。この出力は、組み込まれているJVMに対してnullになることもあります。

- -lは、アプリケーションのmainクラスのフル・パッケージ名、またはアプリケーションのJARファイルへのフル・パス名を表示します。

- -vは、JVMに渡される引数を表示します。

- -Vは、クラス名、JARファイル名およびmainメソッドに渡される引数の出力を抑制し、ローカルJVM識別子のみのリストを生成します。

hostid

プロセス・レポートが生成されるホストの識別子。hostidには、通信プロトコル、ポート番号、実装に固有なその他のデータを指定したオプション・コンポーネントを含めることができます。「ホスト識別子」を参照してください。

-help

jpsコマンドのヘルプ・メッセージを表示します。

説明

jpsコマンドは、ターゲット・システム上で計測されたJava HotSpot VMを一覧表示します。このコマンドで表示できるレポート情報は、アクセス権を持ったJVMに関するものに限定されます。

hostidを指定せずにjpsコマンドを実行した場合、ローカル・ホストで計測されたJVMが検索されます。hostidを指定して起動した場合、指定されたプロトコルとポートを使用して、指定されたホスト上のJVMを検索します。jstatdプロセスがターゲット・ホスト上で実行されていると想定されます。

jpsコマンドは、ターゲット・システムで計測された各JVMについて、ローカルJVM識別子、つまりlvmidをレポートします。lvmidは、一般的にはJVMプロセスに対するオペレーティング・システムのプロセス識別子ですが、必ずしもそうであるとは限りません。オプションを指定しなかった場合、jpsコマンドは、各Javaアプリケーションのlvmidをリストした後に、そのアプリケーションのクラス名またはJARファイル名を簡単な形式でリストします。この簡単な形式のクラス名とJARファイル名では、クラスのパッケージ情報またはJARファイル・パス情報が省略されています。

jpsコマンドは、Java起動ツールを使用して、mainメソッドに渡されるクラス名と引数を検索します。カスタム・ランチャを使用してターゲットJVMを起動した場合、クラス名またはJARファイル名と、mainメソッドに渡される引数は使用できません。この場合、jpsコマンドは、クラス名またはJARファイル名と、mainメソッドへ渡される引数に対して、文字列Unknownを出力します。

jpsコマンドで生成されるJVMのリストは、このコマンドを実行するプリンシパルに与えられたアクセス権に基づき、制限される場合があります。このコマンドは、オペレーティング・システム独自のアクセス制御メカニズムによる決定に基づいて、プリンシパルにアクセス権が与えられているJVMのみをリストします。

ホスト識別子

ホスト識別子、つまりhostid,は、ターゲット・システムを示す文字列です。hostid文字列の構文は、URIの構文に対応しています。

[protocol:][[//]hostname][:port][/servername]

protocol

通信プロトコルです。protocolが省略され、hostnameが指定されていない場合、デフォルトのプロトコルが、プラットフォーム固有の最適化されたローカル・プロトコルになります。プロトコルが省略され、ホスト名が指定されている場合は、デフォルト・プロトコルはrmiになります。

hostname

ターゲット・ホストを示すホスト名またはIPアドレスです。hostnameパラメータを省略した場合、ターゲット・ホストはローカル・ホストになります。

port

リモート・サーバーと通信するためのデフォルト・ポートです。hostnameパラメータが省略されているか、protocolパラメータで最適化されたローカル・プロトコルが指定されている場合、portパラメータは無視されます。そうでなければ、portパラメータの処理は実装によって異なります。デフォルトのrmiプロトコルの場合、portパラメータは、リモート・ホスト上のrmiregistryのポート番号を示します。portパラメータが省略され、protocolパラメータでrmiが指定されている場合、デフォルトのrmiregistryポート(1099)が使用されます。

servername

このパラメータの扱いは、実装によって異なります。最適化されたローカル・プロトコルの場合、このフィールドは無視されます。rmiプロトコルの場合、このパラメータは、リモート・ホスト上のRMIリモート・オブジェクトの名前を表す文字列になります。jstatdコマンドの-nオプションを参照してください。

jpsコマンドの出力形式

jpsコマンドの出力は、次のパターンに従います。

lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]

すべての出力トークンは空白で区切ります。arg値の中で空白を使用すると、実際の定位置パラメータに引数をマッピングしようとするときに、あいまいになります。

注意:

将来のリリースでこの形式は変更される可能性があるため、jpsの出力を解析するスクリプトは作成しないことをお薦めします。jpsの出力を解析するスクリプトを作成する場合は、このツールの将来のリリースにより、そのスクリプトを変更する必要があることに留意してください。

例

このセクションでは、jpsコマンドの例を示します。

ローカル・ホスト上で計測されたJVMを一覧表示する場合:

jps
18027 Java2Demo.JAR
18032 jps
18005 jstat

次の例は、リモート・ホスト上で計測されたJVMを一覧表示しています。この例では、jstatサーバーと、その内部RMIレジストリまたは別の外部rmiregistryプロセスのいずれかが、リモート・ホストのデフォルト・ポート(ポート1099)で実行されていると想定しています。また、ローカル・ホストが、リモート・ホストへの有効なアクセス権を持っていることも想定しています。この例には、-lオプションが含まれ、クラス名またはJARファイル名を詳細な形式で出力します。

jps -l remote.domain
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
2857 sun.tools.jstatd.jstatd

次の例は、RMIレジストリにデフォルトではないポートを使用して、リモート・ホスト上で計測されたJVMをリストしています。この例では、内部RMIレジストリがポート2002にバインドされたjstatdサーバーが、リモート・ホスト上で稼働していると想定しています。また、-mオプションを使用して、一覧表示されたそれぞれのJavaアプリケーションのmainメソッドに渡される引数を組み込んでいます。

jps -m remote.domain:2002
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
3102 sun.tools.jstatd.jstatd -p 2002

jstat

jstatコマンドは、JVMの統計情報をモニターする場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

形式

jstat generalOptions

jstat -outputOptions [ -t] [-hlines] vmid [interval [count] ]

generalOptions

単一の一般的なコマンド行オプション。「一般オプション」を参照してください。

outputOptions

-optionsオプションでレポートされるオプション。単一のstatOptionに加えて、-t、-hおよび-Jオプションのいずれかで構成される1つ以上の出力オプションです。「jstatコマンドの出力オプション」を参照してください。

-t

タイムスタンプ列を出力の最初の列として表示します。タイムスタンプは、ターゲットJVMの起動時からの経過時間です。

-h n

n個のサンプル(出力行)ごとに列ヘッダーを表示します(nは正の整数です)。デフォルト値は0で、この場合、データの最初の行に列ヘッダーが表示されます。

vmid

ターゲットJVMを示す文字列である仮想マシン識別子です。「仮想マシン識別子」を参照してください。

interval

秒(s)またはミリ秒(ms)のうち指定した単位でのサンプリング間隔です。デフォルトの単位はミリ秒です。この値は、正の整数でなければなりません。これが指定された場合、jstatコマンドは各間隔でその出力を生成します。

count

表示するサンプル数です。デフォルト値は無限で、jstatコマンドは、ターゲットJVMが終了するまで、またはjstatコマンドが終了するまで、統計情報を表示します。この値は、正の整数である必要があります。

説明

jstatコマンドは、設置されているJava HotSpot VMのパフォーマンス統計情報を表示します。ターゲットJVMは、仮想マシン識別子またはvmidオプションによって識別されます。

jstatコマンドでは、一般オプションと出力オプションの2つのタイプのオプションがサポートされています。一般オプションを使用した場合、jstatコマンドは簡単な使用率およびバージョン情報を表示します。出力オプションでは、統計データ出力の内容と形式を指定します。

すべてのオプションとその機能は、将来のリリースで変更または廃止される可能性があります。

一般オプション

一般オプションのいずれかを指定した場合、他のオプションまたはパラメータを指定できません。

-help

ヘルプ・メッセージを表示します。

-options

統計オプションのリストを表示します。「jstatコマンドの出力オプション」を参照してください。

jstatコマンドの出力オプション

一般オプションを指定しない場合に、出力オプションを指定できます。出力オプションは、jstatコマンドの出力の内容および形式を指定し、単一のstatOptionに加えて、その他のいずれかの出力オプション(-h、-tおよび-J)で構成されます。statOptionは最初に記述する必要があります。

出力は、各列が空白文字で区切られた表の形式で構成されます。タイトル付きのヘッダー行は、各列の説明です。-hオプションを使用すると、ヘッダー行が表示される頻度を設定できます。列ヘッダー名は、様々なオプション間で一貫性があります。一般に、2つのオプションで同じ名前の列が使用されていれば、2つの列のデータ・ソースは同じになります。

-tオプションを使用すると、Timestampというラベルの付いたタイムスタンプの列が、出力の最初の列として表示されます。Timestamp列には、ターゲットJVMの起動からの経過時間が秒単位で表示されます。タイムスタンプの精度は、さまざまな要因によって異なり、大量の負荷のかかったシステムでのスレッド・スケジュールの遅延により変動します。

intervalおよびcountパラメータを使用して、jstatコマンドがその出力を表示する頻度と回数をそれぞれ指定します。

注意:

将来のリリースでこの形式は変更される可能性があるため、jstatコマンドの出力を解析するスクリプトは作成しないでください。jstatコマンドの出力を解析するスクリプトを作成する場合は、このツールの将来のリリースで、そのスクリプトを変更する必要があります。

-statOption

jstatコマンドで表示される統計情報を指定します。次のリストに、使用可能なオプションを示します。特定のプラットフォームのインストールに関するオプションのリストを表示するには、一般オプション-optionsを使用します。「統計オプションと出力」を参照してください。

class: クラス・ローダーの動作に関する統計情報を表示します。

compiler: Java HotSpot VM Just-in-Timeコンパイラの動作に関する統計情報を表示します。

gc: ガベージ・コレクションが行われたヒープの動作に関する統計情報を表示します。

gccapacity: 世代と対応する領域の容量に関する統計情報を表示します。

gccause: ガベージ・コレクションの統計情報に関するサマリー(-gcutilと同じ)を、直前および現在(適用可能な場合)のガベージ・コレクション・イベントの原因とともに表示します。

gcnew: New世代の動作に関する統計情報を表示します。

gcnewcapacity: New世代とそれに対応する領域のサイズに関する統計情報を表示します。

gcold: Old世代の動作とメタスペースに関する統計データを表示します。

gcoldcapacity: Old世代のサイズに関する統計情報を表示します。

gcmetacapacity: メタスペースのサイズに関する統計情報を表示します。

gcutil: ガベージ・コレクションの統計情報に関するサマリーを表示します。

printcompilation: Java HotSpot VMコンパイル・メソッドの統計情報を表示します。

-JjavaOption

javaOptionをJavaアプリケーションランチャに渡します。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。オプションの詳細リストについては、「java」を参照してください。

統計オプションと出力

次の情報では、jstatコマンドでstatOptionごとに出力される列のサマリーを示します。

-class option

クラス・ローダーの統計情報。

Loaded: ロードされたクラスの数。

Bytes: ロードされたKB数。

Unloaded: アンロードされたクラスの数。

Bytes: ロードされたKB数。

Time: クラスのロード処理およびアンロード処理の実行に要した時間。

-compiler option

Java HotSpot VM Just-in-Timeコンパイラの統計情報。

Compiled: 実行されたコンパイル・タスクの数。

Failed: 失敗したコンパイル・タスクの数。

Invalid: 無効になったコンパイル・タスクの数。

Time: コンパイル・タスクの実行に要した時間。

FailedType: 最後に失敗したコンパイルのコンパイル・タイプ

FailedMethod: 最後に失敗したコンパイルのクラス名とメソッド。

-gc option

ガベージ・コレクションが行われたヒープに関する統計情報。

S0C: Survivor領域0の現在の容量(KB)。

S1C: Survivor領域1の現在の容量(KB)。

S0U: Survivor領域0の使用率(KB)。

S1U: Survivor領域1の使用率(KB)。

EC: Eden領域の現在の容量(KB)。

EU: Eden領域の使用率(KB)。

OC: Old領域の現在の容量(KB)。

OU: Old領域の使用率(KB)。

MC: メタスペースの容量(KB)。

MU: メタスペースの使用率(KB)。

CCSC: 圧縮されたクラス領域の容量(KB)。

CCSU: 使用されている圧縮されたクラス領域(KB)。

YGC: Young世代のガベージ・コレクション(GC)イベントの数。

YGCT: Young世代のガベージ・コレクション時間。

FGC: フルGCイベントの数。

FGCT: フル・ガベージ・コレクションの時間。

GCT: ガベージ・コレクションの総時間。

-gccapacity option

メモリー・プールの世代および領域の容量。

NGCMN: New世代の最小容量(KB)。

NGCMX: New世代の最大容量(KB)。

NGC: New世代の現在の容量(KB)。

S0C: Survivor領域0の現在の容量(KB)。

S1C: Survivor領域1の現在の容量(KB)。

EC: Eden領域の現在の容量(KB)。

OGCMN: Old世代の最小容量(KB)。

OGCMX: Old世代の最大容量(KB)。

OGC: Old世代の現在の容量(KB)。

OC: Old領域の現在の容量(KB)。

MCMN: メタスペースの最小容量(KB)。

MCMX: メタスペースの最大容量(KB)。

MC: メタスペースの容量(KB)。

CCSMN: 圧縮されたクラス領域の最小容量(KB)。

CCSMX: 圧縮されたクラス領域の最大容量(KB)。

CCSC: 圧縮されたクラス領域の容量(KB)。

YGC: Young世代のGCイベントの数。

FGC: フルGCイベントの数。

-gccause option

このオプションは、-gcutilオプションと同じガベージ・コレクション統計情報のサマリーを表示しますが、最後のガベージ・コレクション・イベントと(適用可能な場合は),現在のガベージ・コレクション・イベントの原因が含まれます。-gcutilで一覧表示される列のほか、このオプションでは次の列が追加されます。

LGCC: 最後のガベージ・コレクションの原因

GCC: 現在のガベージ・コレクションの原因

-gcnew option

New世代の統計情報。

S0C: Survivor領域0の現在の容量(KB)。

S1C: Survivor領域1の現在の容量(KB)。

S0U: Survivor領域0の使用率(KB)。

S1U: Survivor領域1の使用率(KB)。

TT: 殿堂入りしきい値。

TT: 最大殿堂入りしきい値。

DSS: 適切なSurvivorサイズ(KB)。

EC: Eden領域の現在の容量(KB)。

EU: Eden領域の使用率(KB)。

YGC: Young世代のGCイベントの数。

YGCT: Young世代のガベージ・コレクション時間。

-gcnewcapacity option

New世代領域サイズの統計情報。

NGCMN: New世代の最小容量(KB)。

NGCMX: New世代の最大容量(KB)。

NGC: New世代の現在の容量(KB)。

S0CMX: Survivor領域0の最大容量(KB)。

S0C: Survivor領域0の現在の容量(KB)。

S1CMX: Survivor領域1の最大容量(KB)。

S1C: Survivor領域1の現在の容量(KB)。

ECMX: Eden領域の最大容量(KB)。

EC: Eden領域の現在の容量(KB)。

YGC: Young世代のGCイベントの数。

FGC: フルGCイベントの数。

-gcold option

Old世代サイズの統計情報。

MC: メタスペースの容量(KB)。

MU: メタスペースの使用率(KB)。

CCSC: 圧縮されたクラス領域の容量(KB)。

CCSU: 使用されている圧縮されたクラス領域(KB)。

OC: Old領域の現在の容量(KB)。

OU: Old領域の使用率(KB)。

YGC: Young世代のGCイベントの数。

FGC: フルGCイベントの数。

FGCT: フル・ガベージ・コレクションの時間。

GCT: ガベージ・コレクションの総時間。

-gcoldcapacity option

Old世代の統計情報。

OGCMN: Old世代の最小容量(KB)。

OGCMX: Old世代の最大容量(KB)。

OGC: Old世代の現在の容量(KB)。

OC: Old領域の現在の容量(KB)。

YGC: Young世代のGCイベントの数。

FGC: フルGCイベントの数。

FGCT: フル・ガベージ・コレクションの時間。

GCT: ガベージ・コレクションの総時間。

-gcmetacapacity option

メタスペース・サイズの統計情報。

MCMN: メタスペースの最小容量(KB)。

MCMX: メタスペースの最大容量(KB)。

MC: メタスペースの容量(KB)。

CCSMN: 圧縮されたクラス領域の最小容量(KB)。

CCSMX: 圧縮されたクラス領域の最大容量(KB)。

YGC: Young世代のGCイベントの数。

FGC: フルGCイベントの数。

FGCT: フル・ガベージ・コレクションの時間。

GCT: ガベージ・コレクションの総時間。

-gcutil option

ガベージ・コレクション統計データのサマリー

S0: Survivor領域0の使用率(現在の容量に対するパーセンテージ)。

S1: Survivor領域1の使用率(現在の容量に対するパーセンテージ)。

E: Eden領域の使用率(現在の容量に対するパーセンテージ)。

O: Old領域の使用率(現在の容量に対するパーセンテージ)。

M: メタスペースの使用率(現在の容量に対するパーセンテージ)。

CCS: 圧縮されたクラス領域の使用率(パーセンテージ)。

YGC: Young世代のGCイベントの数。

YGCT: Young世代のガベージ・コレクション時間。

FGC: フルGCイベントの数。

FGCT: フル・ガベージ・コレクションの時間。

GCT: ガベージ・コレクションの総時間。

-printcompilation option

Java HotSpot VMコンパイル・メソッドの統計情報。

Compiled: 最近コンパイルされたメソッドによって実行されたコンパイル・タスクの数。

Size: 最近コンパイルされたメソッドのバイト・コードのバイト数。

Type: 最近コンパイルされたメソッドのコンパイル型。

Method: 最近コンパイルされたメソッドを特定するクラス名とメソッド名。クラス名では、ネームスペースのセパレータとして、ドット(.)ではなくスラッシュ(/)が使用されます。メソッド名は、指定されたクラス内のメソッドです。これらの2つのフィールドの形式は、HotSpotの-XX:+PrintCompilationオプションと対応しています。

仮想マシン識別子

vmid文字列の構文は、URIの構文に対応しています。

[protocol:][//]lvmid[@hostname[:port]/servername]

vmid文字列の構文は、URIの構文に対応しています。vmid文字列は、ローカルJVMを表す単純な整数から、通信プロトコル、ポート番号、およびその他の実装固有の値を指定する複雑な構造まで様々に異なります。

protocol

通信プロトコルです。protocol値が省略され、ホスト名が指定されていない場合、デフォルトのプロトコルがプラットフォーム固有の最適化されたローカル・プロトコルになります。protocol値が省略され、ホスト名が指定されている場合、デフォルト・プロトコルはrmiになります。

lvmid

ターゲットJVMのローカル仮想マシン識別子です。lvmidは、システム上のJVMを一意に識別するプラットフォーム固有の値です。lvmidは、仮想マシン識別子の唯一の必須要素です。lvmidは、一般的にはターゲットJVMプロセスに対するオペレーティング・システムのプロセス識別子ですが、必ずしもそうであるとは限りません。jpsコマンドを使用して、lvmidを指定できます。また、Oracle Solaris、LinuxおよびOS Xの各プラットフォームではpsコマンドを使用して、WindowsではWindowsタスク・マネージャを使用して、lvmidを特定できます。

hostname

ターゲット・ホストを示すホスト名またはIPアドレスです。hostname値が省略されている場合は、ターゲット・ホストはローカル・ホストになります。

port

リモート・サーバーと通信するためのデフォルト・ポートです。hostname値が省略されているか、protocol値で最適化されたローカル・プロトコルが指定されている場合、port値は無視されます。そうでなければ、portパラメータの処理は実装によって異なります。デフォルトのrmiプロトコルの場合、port値はリモート・ホスト上のrmiregistryのポート番号を示します。port値が省略され、protocol値でrmiが指定されている場合、デフォルトのrmiregistryポート(1099)が使用されます。

servername

servernameパラメータの処理は、実装によって異なります。最適化されたローカル・プロトコルの場合、このフィールドは無視されます。rmiプロトコルの場合は、このパラメータは、リモート・ホスト上のRMIリソース・オブジェクトの名前を示します。

例

この項では、lvmidが21891のローカルJVMをモニターする例をいくつか示します。

gcutilオプション

この例では、lvmid 21891に接続して、250ミリ秒間隔で7つのサンプルを取得し、-gcutilオプションでの指定に従って出力を表示します。

この例の出力は、Young世代のコレクションが3番目と4番目のサンプル間で行われたことを示しています。コレクションには0.078秒かかっており、オブジェクトがEden領域(E)からOld領域(O)に昇格したため、Old領域の使用率は66.80%から68.19%に増加しています。Survivor領域は、コレクション前は97.02%が使用されていましたが、コレクション後は91.03%が使用されています。

jstat -gcutil 21891 250 7
S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
0.00  97.02  70.31  66.80  95.52  89.14      7    0.300     0    0.000    0.300
0.00  97.02  86.23  66.80  95.52  89.14      7    0.300     0    0.000    0.300
0.00  97.02  96.53  66.80  95.52  89.14      7    0.300     0    0.000    0.300
91.03   0.00   1.98  68.19  95.89  91.24      8    0.378     0    0.000    0.378
91.03   0.00  15.82  68.19  95.89  91.24      8    0.378     0    0.000    0.378
91.03   0.00  17.80  68.19  95.89  91.24      8    0.378     0    0.000    0.378
91.03   0.00  17.80  68.19  95.89  91.24      8    0.378     0    0.000    0.378

列ヘッダー文字列の繰返し

この例では、lvmid 21891に接続して、250ミリ秒間隔でサンプルを取得し、-gcnewオプションでの指定に従って出力を表示します。さらに、-h3オプションを使用して、データが3行表示されるごとに列ヘッダーを出力します。

この例では、ヘッダー文字列の繰返しが見られる他にも、2番目と3番目のサンプル間でYoung GCが行われたことがわかります。この継続時間は0.001秒でした。このコレクションでは、Survivor領域0の使用率(S0U)が適切なSurvivorサイズ(DSS)を超過するのに十分なアクティブ・データが検出されました。この結果、オブジェクトは、Old世代(この出力には非表示)へ昇格され、殿堂入りしきい値(TT)が、31から2へ降格されました。

別のコレクションが、5番目と6番目のサンプル間で行われています。このコレクションでは、Survivorがほとんど見られず、殿堂入りしきい値を31に戻しました。

jstat -gcnew -h3 21891 250
S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
64.0   64.0    0.0   31.7 31  31   32.0    512.0    178.6    249    0.203
64.0   64.0    0.0   31.7 31  31   32.0    512.0    355.5    249    0.203
64.0   64.0   35.4    0.0  2  31   32.0    512.0     21.9    250    0.204
S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
64.0   64.0   35.4    0.0  2  31   32.0    512.0    245.9    250    0.204
64.0   64.0   35.4    0.0  2  31   32.0    512.0    421.1    250    0.204
64.0   64.0    0.0   19.0 31  31   32.0    512.0     84.4    251    0.204
S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
64.0   64.0    0.0   19.0 31  31   32.0    512.0    306.7    251    0.204

サンプルごとのタイムスタンプの挿入

この例は、lvmid 21891へ接続し、250ミリ秒間隔で3つのサンプルを取得しています。-tオプションを使用して、最初の列にサンプルごとのタイムスタンプを表示しています。

Timestamp列には、ターゲットJVMの起動時からの経過時間が、秒単位で報告されています。さらに、-gcoldcapacity出力では、割当て要求または昇格要求あるいはその両方を満たすためにヒープが拡張するごとに、Old世代の容量(OGC)とOld領域の容量(OC)とが増加していることがわかります。81番目のフル・ガベージ・コレクション(FGC)の後、Old世代の容量(OGC)は11,696 KBから13,820 KBに増加しました。この世代(および領域)の最大容量は、60,544 Kバイト(OGCMX)なので、まだ拡張できる余裕が残されています。

Timestamp      OGCMN    OGCMX     OGC       OC       YGC   FGC    FGCT    GCT
150.1   1408.0  60544.0  11696.0  11696.0   194    80    2.874   3.799
150.4   1408.0  60544.0  13820.0  13820.0   194    81    2.938   3.863
150.7   1408.0  60544.0  13820.0  13820.0   194    81    2.938   3.863

リモートJVMのインストゥルメンテーションのモニター

この例では、-gcutilオプションを使用して、remote.domainというシステム上のlvmid 40496に接続し、サンプルを秒単位で無期限に取得します。

lvmidは、リモート・ホストの名前と結合されて、40496@remote.domainのvmidを構成しています。結果として、このvmidはrmiプロトコルを使用して、リモート・ホスト上のデフォルトのjstatdサーバーと通信します。jstatdサーバーは、rmiregistryコマンドを使用して、rmiregistryコマンドのデフォルトのポート(ポート1099)にバインドされたremote.domainに配置されます。

jstat -gcutil 40496@remote.domain 1000
... output omitted

jstatd

jstatdコマンドは、計測されたJava HotSpot VMの作成および終了をモニターする場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

形式

jstatd [options ]

options

これは、jstatdコマンド行オプションです。「jstatdコマンドのオプション」を参照してください。

説明

jstatdコマンドは、計測されたJava HotSpot VMの作成と終了をモニターし、ローカル・システム上で実行しているJava仮想マシンに、リモート・モニター・ツールが接続できるようにするためのインタフェースを提供するRMIサーバー・アプリケーションです。

jstatdサーバーには、ローカル・ホスト上のRMIレジストリが必要です。jstatdサーバーは、デフォルト・ポートまたは-p portオプションで指定したポート上のRMIレジストリに接続しようとします。RMIレジストリが見つからない場合は、-p portオプションで指定されたポート(-p portオプションが省略されている場合はデフォルトのRMIレジストリ・ポート)にバインドされたjstatdアプリケーション内にRMIレジストリが1つ作成されます。内部RMIレジストリの作成は、-nrオプションを指定することによって停止できます。

jstatdコマンドのオプション

-nr

このオプションは、既存のRMIレジストリが見つからない場合、jstatdプロセス内に内部RMIレジストリを作成しないようにします。

-p port

このオプションは、RMIレジストリがあると予想されるポート番号を設定します。見つからない場合は、-nrオプションが指定されていなければ作成されます。

-n rminame

このオプションは、RMIレジストリにおいて、リモートRMIオブジェクトがバインドされる名前を設定します。デフォルト名はJStatRemoteHostです。複数のjstatdサーバーが同じホスト上で起動している場合、各サーバーのエクスポートしたRMIオブジェクトの名前は、このオプションを指定することによって、一意の名前にすることができます。ただし、そのようにする場合は、モニタリング・クライアントのhostidおよびvmid文字列にその一意のサーバー名を含める必要があります。

-Joption

このオプションは、JVMにJavaのoptionを渡します(optionは、Javaアプリケーション・ランチャのリファレンス・ページに記載されているオプションのいずれかです)。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。「java」を参照してください。

セキュリティ

jstatdサーバーは、適切なネイティブ・アクセス権を持つJVMのみをモニターできます。したがって、jstatdプロセスは、ターゲットJVMと同じユーザー資格で実行されている必要があります。Oracle Solaris、LinuxおよびOS Xの各オペレーティング・システムにおけるrootユーザーなどの一部のユーザー資格証明は、システム上の任意のJVMによってエクスポートされたインストゥルメンテーションへのアクセス権を持っています。このような資格で実行されているjstatdプロセスは、システム上のすべてのJVMをモニターできますが、セキュリティ上の別の問題が起こります。

jstatdサーバーには、リモート・クライアントの認証機能がありません。そのため、jstatdサーバー・プロセスを実行すると、jstatdプロセスがアクセス権を持つすべてのJVMによるインストゥルメンテーションのエクスポートを、ネットワーク上のすべてのユーザーに公開することになります。この無防備な状態は、環境によっては望ましくない場合があるので、特に本番環境または安全でないネットワークでは、jstatdプロセスを起動する前に、ローカル・セキュリティ・ポリシーを検討する必要があります。

jstatdサーバーは、他のセキュリティ・マネージャがインストールされていない場合には、RMISecurityPolicyのインスタンスをインストールします。そのため、セキュリティ・ポリシー・ファイルを指定する必要があります。ポリシー・ファイルは、デフォルトのPolicyの実装とポリシー・ファイルの構文に関する項に準拠する必要があります。

セキュリティの問題について、カスタマイズしたポリシー・ファイルでも対処できない場合は、jstatdサーバーを実行せずに、jstatとjpsツールをローカルで使用することが最も安全な方法になります。

リモート・インタフェース

jstatdプロセスがエクスポートするインタフェースは、独自に開発したものであり変更される予定です。ユーザーおよび開発者は、このインタフェースへの書込みを行わないでください。

例

jstatdコマンドの例を次に示します。jstatdスクリプトによって、サーバーはバックグラウンドで自動的に起動します

内部RMIレジストリ

この例は、内部RMIレジストリを使ってjstatdセッションを開始する方法を示しています。この例では、デフォルトのRMIレジストリ・ポート(ポート1099)には、他のサーバーはバインドされていないと想定しています。

jstatd -J-Djava.security.policy=all.policy

外部RMIレジストリ

この例は、外部RMIレジストリを使用してjstatdセッションを開始しています。

rmiregistry&
jstatd -J-Djava.security.policy=all.policy

この例は、ポート2020上の外部RMIレジストリ・サーバーを使用してjstatdセッションを開始しています。

jrmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020

この例は、AlternateJstatdServerNameにバインドされたポート2020上の外部RMIレジストリを使用してjstatdセッションを開始しています。

rmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020
-n AlternateJstatdServerName

インプロセスRMIレジストリの作成の停止

この例は、RMIレジストリが見つからない場合にRMIレジストリを作成しないjstatdセッションを開始しています。この例では、RMIレジストリがすでに実行していると想定しています。RMIレジストリが実行されていない場合は、エラー・メッセージが表示されます。

jstatd -J-Djava.security.policy=all.policy -nr

RMIロギングの有効化

この例では、RMIロギング機能を有効にしてjstatdセッションを開始しています。この方法は、トラブルシューティングまたはサーバー活動のモニタリングに役立ちます。

jstatd -J-Djava.security.policy=all.policy
-J-Djava.rmi.server.logCalls=true

jmc

jmcコマンドは、Java Mission Controlを起動する場合に使用します。Java Mission Controlは、プロファイリング、モニタリングおよび診断ツールのスイートです。

形式

jmc

説明

Java Mission Controlは、Java HotSpot JVMの本番時のプロファイリングと診断のためのツールです。Java Mission Controlの主な機能は管理コンソールとJava Flight Recorderの2つですが、ほかにもいくつかの機能がツールからダウンロードできるプラグインとして用意されています。Java Mission Controlは、Eclipse IDE用のプラグインのセットとしても使用可能です。

10 Webサービスのツールおよびコマンド

JDK Webサービスのツールおよびコマンドは、Webサービスのリソースを作成および管理するのに使用できます。

次の各項では、JDK Webサービスのツールおよびコマンドについて説明します。

- schemagen: schemagenツールおよびコマンドは、Javaクラスで参照されるネームスペースごとにスキーマを生成する場合に使用できます。

- wsgen: wsgenコマンドは、JAX-WS Webサービスで使用されるJava API for XML Webサービス(JAX-WS)ポータブル・アーティファクトを生成する場合に使用します。

- wsimport: wsimportコマンドは、Java API for XML Webサービス(JAX-WS)ポータブル・アーティファクトを生成する場合に使用します。

- xjc: xjcシェル・スクリプトは、XMLスキーマ・ファイルをコンパイルして、完全注釈付きJavaクラスにする場合に使用します。

schemagen

schemagenツールおよびコマンドは、Javaクラスで参照されるネームスペースごとにスキーマを生成する場合に使用できます。

形式

schemagen [ options ] java-files

options

コマンド行オプションです。「schemagenツールのオプション」を参照してください。

java-files

処理対象のJavaクラス・ファイルです。

説明

スキーマ・ジェネレータは、Javaクラス内で参照されている名前空間ごとに1つのスキーマ・ファイルを作成します。現時点では、生成されるスキーマ・ファイルの名前を制御できません。

プラットフォームのbinディレクトリにある適切なschemagenシェル・スクリプトを使用して、スキーマ・ジェネレータを起動します。現在のスキーマ・ジェネレータは、Javaソース・ファイルとクラス・ファイルのいずれも処理できます。

schemagen.sh Foo.java Bar.java ...
Note: Writing schema1.xsd

Javaファイルが他のクラスを参照している場合は、システムのCLASSPATH環境変数で、これらのクラスにアクセスできるようにする必要があります。あるいは、クラス・パスのオプションを使用して、これらのクラスをschemagenコマンド行で指定する必要があります。参照されているファイルにアクセスできない場合やファイルが指定されていない場合は、スキーマを生成するときにエラーが表示されます。

schemagenツールのオプション

-d path

このオプションは、schemagenコマンドによって、プロセッサで生成されたクラス・ファイルおよびjavacで生成されたクラス・ファイルが配置される場所を設定します。

-cp pathまたは-classpath path

このオプションは、schemagenコマンドによって、ユーザーが指定したクラス・ファイルが配置される場所を設定します。

-encoding encoding

このオプションは、aptまたはjavacコマンドを呼び出す際に使用されるエンコーディングを指定します。

-episode file

このオプションは、個々のコンパイルごとにエピソード・ファイルを生成します。

-disableXmlSecurity

このオプションは、XML解析APIで使用するためのXMLセキュリティ機能を無効にします。

-version

このオプションは、リリース情報を表示します。

-fullversion

このオプションは、フル・バージョン情報を表示します。

-help

このオプションは、ヘルプ・メッセージを表示します。

wsgen

wsgenコマンドは、JAX-WS Webサービスで使用されるJava API for XML Webサービス(JAX-WS)ポータブル・アーティファクトを生成する場合に使用します。

形式

wsgen [options] SEI

options

これは、wsgenコマンド行オプションです。「wsgenのオプション」を参照してください。

SEI

読み取られるWebサービス・エンドポイント実装(SEI)クラスです。

説明

wsgenコマンドは、JAX-WS Webサービスで使用されるJAX-WSポータブル・アーティファクトを生成します。このツールは、Webサービスのエンドポイント・クラスを読み取り、Webサービスの配備と呼出しに必要なすべてのアーティファクトを生成します。

wsgenツールを起動するには、次のコマンドを入力します。

- Oracle Solaris、LinuxおよびOS X:

export JAXWS_HOME=/pathto/jaxws-ri
$JAXWS_HOME/bin/wsgen.sh -help

- Windows:

set JAXWS_HOME=c:\pathto\jaxws-ri
%JAXWS_HOME%\bin\wsgen.bat -help

wsgenのオプション

-classpath pathまたは-cp path

このオプションは、入力クラス・ファイルの場所を設定します。

-d directory

このオプションは、生成された出力ファイルを格納する場所を設定します。

-encoding encoding

このオプションは、ソース・ファイルで使用される文字エンコーディングを指定します。

-extension

このオプションは、ベンダー拡張を使用できるようにします。拡張を使用すると、アプリケーションの移植性が失われたり、他の実装で機能しなくなる可能性があります。

-help

このオプションは、wsgenコマンドに関するヘルプ・メッセージを表示します。

-Joption

-keep

このオプションは、生成されたファイルを保持します。

-r directory

このオプションは、Webサービス定義言語(WSDL)ファイルなど、生成されたリソース・ファイルの格納場所を指定する際に、-wsdlオプションと一緒に使用します。

-s directory

このオプションは、生成されたソース・ファイルを格納する場所を設定します。

-verbose

このオプションは、コンパイラのメッセージを表示します。

-version

このオプションは、リリース情報を出力します。

-fullversion

このオプションは、フル・バージョン情報を出力します。

-wsdl[:protocol]

これは、エンドポイント・デプロイメントの前に確認するためにWSDLファイルを生成するオプションのコマンドです。WSDLファイルには、サービスを呼び出す方法、予測されるパラメータおよび返されるデータ構造についての説明がマシンで読取り可能な形式で含まれています。

注意:

JAX-WSランタイム環境ではサービスのデプロイ時にWSDLファイルが生成されるため、開発時にWSDLを生成する必要はありません。

デフォルトでは、wsgenコマンドはWSDLファイルを生成しません。protocol値はオプションであり、WSDLバインディング(wsdl:binding)で使用されるプロトコルを指定するために使用されます。有効なプロトコルはsoap1.1およびXsoap1.2です。デフォルトはsoap1.1です。Xsoap1.2プロトコルは標準ではなく、-extensionオプションと一緒でしか使用できません。

-inlineSchemas

このオプションは、生成されたwsdlにインライン・スキーマを生成します。これは、-wsdlオプションと組み合せて使用する必要があります。

-servicename name

このオプションは、WSDLファイルで生成される特定のWSDLサービス(wsdl:service)名(-servicename "{http://mynamespace/}MyService"など)を指定する際に、-wsdlオプションと一緒にのみ使用されます。

-portname name

このオプションは、WSDLファイルで生成される特定のWSDLポート(wsdl:port)名(-portname "{http://mynamespace/}MyPort"など)を指定する際に、-wsdlオプションと一緒にのみ使用されます。

-x file

このオプションは、外部Webサービス・メタデータXMLディスクリプタを指定します。

wsgenの拡張機能

-Xnocompile

このオプションは、生成されたJavaファイルをコンパイルしません。

例

次の例では、stockディレクトリ内に@WebService注釈付きでStockServiceのラッパー・クラスを生成します。

wsgen -d stock -cp myclasspath stock.StockService

次の例では、Simple Object Access Protocol (SOAP) 1.1 WSDLファイルおよび@WebService注釈付きのstock.StockServiceクラスのスキーマを生成します。

wsgen -wsdl -d stock -cp myclasspath stock.StockService

次の例では、SOAP 1.2 WSDLファイルを生成します。

wsgen -wsdl:Xsoap1.2 -d stock -cp myclasspath stock.StockService

wsimport

wsimportコマンドは、Java API for XML Webサービス(JAX-WS)ポータブル・アーティファクトを生成する場合に使用します。

形式

wsimport [ options ] wsdl_URI

options

これは、wsimportコマンド行オプションです。「wsimportコマンドのオプション」を参照してください。

wsdl_URI

Webサービスを呼び出す方法、予測されるパラメータおよび返されるデータ構造に関するマシン判読可能形式の説明を含むファイル。

説明

wsimportコマンドは、次のJAX-WSポータブル・アーティファクトを生成します。これらのアーティファクトは、Webサービス定義言語(WSDL)ファイル・ドキュメント、スキーマ・ドキュメントおよびエンドポイント実装とともに、WARファイルにパッケージ化してデプロイできます。また、wsimportコマンドは、wsimport Antタスクを提供します。

- サービス・エンドポイント・インタフェース(SEI)

- サービス

- wsdl:faultから例外クラスがマップされます(存在する場合)

- 応答wsdl:messageから非同期応答Beanが派生されます(存在する場合)

- Java Architecture for XML Binding (JAXB)が生成する値タイプ(スキーマ・タイプからマップされたJavaクラス)

wsgenコマンドを起動するには、次のコマンドを入力します。

- Oracle Solaris/Linux:

/bin/wsimport.sh -help

- Windows:

\bin\wsimport.bat -help

wsimportコマンドのオプション

-b path

外部のJAX-WSまたはJAXBバインディング・ファイルを指定します。-bオプションを使用して、複数のJAX-WSおよびJava Architecture for XML Binding (JAXB)バインディング・ファイルを指定できます。これらのファイルを使って、パッケージ名やBean名などをカスタマイズできます。

-B jaxbOption

jaxbOptionオプションをJAXBスキーマ・コンパイラに渡します。

-catalog file

外部エンティティ参照を解決するカタログ・ファイルを指定します。-catalogオプションは、TR9401、XCatalogおよびOASIS XML Catalog形式をサポートします。

-classpath pathまたは-cp path

ユーザー・クラス・ファイルとwsimportの拡張機能を検索する場所を指定します。

-d directory

生成される出力ファイルを格納する場所を指定します。

-encoding encoding

ソース・ファイルで使用される文字エンコーディングを指定します。

-extension

ベンダー拡張を使用できるようにします。拡張を使用すると、アプリケーションの移植性が失われたり、他の実装で機能しなくなる可能性があります。

-help

wsimportコマンドのヘルプ・メッセージを表示します。

-httpproxy:proxy

HTTPプロキシ・サーバーを指定します。形式は次のとおりです。

[user[:password]@]proxyHost:proxyPort

-JjavacOption

このオプションをjavacに渡します。

-keep

生成されたファイルを保持します。

-p name

WSDLファイルおよびスキーマのバインディング・カスタマイズや仕様で定義されているデフォルトのアルゴリズムをオーバーライドするターゲット・パッケージの名前を指定します。

—m name

指定のJavaモジュール名でmodule-info.javaを生成します。

-quiet

wsimportコマンドの出力を抑制します。

-s directory

生成されるソース・ファイルを格納する場所を指定します。

-target version

指定されたJAX-WS仕様バージョンに従ってコードを生成します。バージョン2.0では、JAX-WS 2.0仕様に準拠したコードを生成します。

-verbose

コンパイラのメッセージを表示します。

-version

バージョン情報を出力します。

-fullversion

フル・バージョン情報を出力します。

-wsdllocation location

@WebServiceClient.wsdlLocationの値を指定します。

-clientjar jarfile

Webサービスの呼出しに必要なWSDLメタデータとともに、生成されたアーティファクトのjarファイルを作成します。

-generateJWS

スタブ化されたJava Web Start (JWS)実装ファイルを生成します。

-implDestDir directory

JWS実装ファイルの生成場所を指定します。

-implServiceName name

生成されたJWS実装のサービス名のローカル部分を指定します。

-implPortName name

生成されたJWS実装のポート名のローカル部分を指定します。

-bオプションを使って、複数のJAX-WSおよびJAXBバインディング・ファイルを指定できます。これらのファイルを使って、パッケージ名やBean名など、様々な要素をカスタマイズできます。

wsimportコマンドの拡張機能

-XadditionalHeaders

要求またはレスポンス・メッセージにバインドされないヘッダーをJavaメソッドのパラメータにマップします。

-Xauthfile file

承認情報を含むファイルを指定するWSDL URIを指定します。このURIの形式は次のとおりです。

http://user-name:password@host-name/web-service-name>?wsdl.

-Xdebug

デバッグ情報を出力します。

-Xno-addressing-databinding

W3CEndpointReferenceTypeとJavaのバインディングを有効にします。

-Xnocompile

生成されたJavaファイルをコンパイルしません。

-XdisableAuthenticator

JAX-WSリファレンス実装で使用されたオーセンティケータを無効にします。-Xauthfileオプションは、設定した場合、無視されます。

-XdisableSSLHostnameVerification

wsdlファイルのフェッチ中のSSLホスト名検証を無効にします。

例

wsimportコマンドの使用例を次に示します。

wsimport stock.wsdl -b stock.xml -b stock.xjb

wsimport -d generated http://example.org/stock?wsdl

xjc

xjcシェル・スクリプトは、XMLスキーマ・ファイルをコンパイルして、完全注釈付きJavaクラスにする場合に使用します。

形式

xjc [-options] schema file/URL/dir/jar ... [-b bindinfo] ...

options

これは、xjcコマンド行オプションです。「xjcコマンドのオプション」を参照してください。

schema file/URL/dir/jar

これは、XMLスキーマ・ファイルの場所です。dirが指定されている場合は、その中にあるすべてのスキーマ・ファイルがコンパイルされます。jarが指定されている場合は、/META-INF/sun-jaxb.episodeバインディング・ファイルがコンパイルされます。

これは、コンパイル対象となる1つ以上のスキーマ・ファイルを指定します。ディレクトリを指定した場合、xjcコマンドはすべてのスキーマ・ファイルでそのディレクトリをスキャンし、それらをコンパイルします。

-b bindinfo

バインディング・ファイルの場所です。

注意:

dirが指定されている場合は、その中にあるすべてのスキーマ・ファイルがコンパイルされます。jarが指定されている場合は、/META-INF/sun-jaxb.episodeバインディング・ファイルがコンパイルされます。

説明

プラットフォームのbinディレクトリにある適切なxjcシェル・スクリプトを使用して、バインディング・コンパイラを起動します。バインディング・コンパイラを実行するAntタスクも用意されています。

xjcコマンドのオプション

-nv

このオプションは、厳密なスキーマ検証を無効にします。これは、バインディング・コンパイラが検証を一切実行しないということではなく、より厳密でない検証を実行するということです。

デフォルトでは、xjcバインディング・コンパイラは、ソース・スキーマを処理する前に厳密な検証を実行します。

-extension

このオプションは、ベンダー拡張を使用できるようにします。デフォルトでは、xjcバインディング・コンパイラは、JAXB仕様の互換性規則に関する章および付録E.2で説明されている規則を厳密に強制します。付録E.2では、JAXB v1.0で完全にはサポートされていない一連のW3C XMLスキーマ機能が定義されています。場合によっては、このスイッチで有効になる-extensionモードでそれらの機能が使用できる場合があります。また、デフォルトの厳密なモードでは、仕様に定義されているバインディング・カスタマイズのみの使用に制限されます。-extensionスイッチを使用すると、JAXB Vendor Extensionを使用できます。

-b file/dir

このオプションは、処理対象となる1つ以上の外部バインディング・ファイルを指定します。バインディング・ファイルごとに-bスイッチを指定する必要があります。外部バインディング・ファイルの構文には柔軟性があります。複数のスキーマに対応したカスタマイズが含まれる単一のバインディング・ファイルを保持することも、そのカスタマイズを複数のバインディング・ファイルに分割することもできます。例:

xjc schema1.xsd schema2.xsd schema3.xsd -b bindings123.xjb

xjc schema1.xsd schema2.xsd schema3.xsd -b bindings1.xjb -b bindings2.xjb -b bindings3.xjb.

さらに、コマンド行ではスキーマ・ファイルおよびバインディング・ファイルの順序は問いません。

-d dir

このオプションは、デフォルトのかわりに使用する出力ディレクトリを指定します。出力ディレクトリは、すでに存在している必要があります。xjcバインディング・コンパイラでは作成されません。

デフォルトでは、xjcバインディング・コンパイラは、Javaコンテンツ・クラスを現在のディレクトリに生成します。

-p pkg

このコマンド行オプションを使用してターゲット・パッケージを指定した場合は、その指定によって、パッケージ名に対するすべてのバインディング・カスタマイズや、仕様で規定されているデフォルトのパッケージ名アルゴリズムがオーバーライドされます。

-m name

このオプションは、指定のJavaモジュール名を使用してmodule-info.javaを生成します。

-httpproxy proxy

これは、[user[:password]@]proxyHost[:proxyPort]の形式でHTTPまたはHTTPSプロキシを指定します。従来の-hostおよび-portオプションは、下位互換性を保つためにリファレンス実装でもサポートされていますが、非推奨になりました。このオプションで指定されたパスワードは、topコマンドを使用する他のユーザーも表示できる引数です。セキュリティを高めるには、-httpproxyfileオプションを使用してください。

-httpproxyfile file

このオプションは、ファイルを使用してHTTPまたはHTTPSプロキシを指定します。これは、-httpproxyオプションと同じ形式ですが、このファイル内に指定されたパスワードを他のユーザーが表示することはできません。

-classpath arg

このオプションは、jxb:javaTypeおよびxjc:superClassカスタマイズで使用されるクライアント・アプリケーションのクラス・ファイルの検索場所を指定します。

-catalog file

このオプションは、外部エンティティ参照を解決するカタログ・ファイルを指定します。TR9401、XCatalogおよびOASIS XML Catalog形式をサポートします。

-readOnly

このオプションは、xjcバインディング・コンパイラが生成されたJavaソースに読取り専用マークを付けるように強制します。

デフォルトでは、xjcバインディング・コンパイラは、生成するJavaソース・ファイルを書き込みから保護しません。

-npa

このオプションは、パッケージ・レベルの注釈を**/package-info.javaに生成することを抑制します。このスイッチを使用して生成するコードでは、これらの注釈がほかの生成済みクラスに内部化されます。

-no-header

このオプションは、いくつかのメモとタイムスタンプを含むファイル・ヘッダー・コメントの生成を抑制します。このオプションを使用すると、生成されたコードとdiffコマンドとの互換性が高くなります。

-target [2.0|2.1]

このオプションは、指定されたJAXWS仕様のバージョンに従ってコードを生成します。デフォルトは2.2です。使用できる値は、2.0、2.1および2.2です。

-encoding encoding

このオプションは、生成されるソース・ファイルの文字エンコーディングを指定します。

-enableIntrospection

このオプションを使用すると、BeanイントロスペクションAPIを有効にするブール型のgetterおよびsetterを正しく生成できます。

-disableXmlSecurity

このオプションは、XML文書の解析時のXMLセキュリティ機能を無効にします。

-contentForWildcard

このオプションは、複数のxs:any導出要素を持つタイプのコンテンツ・プロパティを生成します。

-xmlschema

このオプションは、入力スキーマをW3C XMLスキーマとして処理します(デフォルト)。このスイッチを指定しない場合、入力スキーマはW3C XMLスキーマと同様に処理されます。

-dtd

このオプションは、入力スキーマをXML DTDとして処理します(試験的でサポート対象外)。RELAX NGスキーマのサポートはJAXB Vendor Extensionとして提供されています。

-wsdl

このオプションは、入力をWSDLとして処理し、その内部のスキーマをコンパイルします(試験的でサポート対象外)。

-verbose

このオプションは、情報メッセージを出力したりエラーの発生時にスタック・トレースを表示するなど、詳細出力を追加で生成します。

-quiet

このオプションは、進捗情報や警告など、コンパイラの出力を抑制します。

-help

このオプションは、コンパイラ・スイッチの簡単なサマリーを表示します。

-version

このオプションは、コンパイラのバージョン情報を表示します。

-fullversion

このオプションは、フル・バージョン情報を表示します。

xjcコマンドの拡張機能

-Xpropertyaccessors

このオプションでは、生成されたクラスに対してFIELDではなく、XmlAccessType PROPERTYを使用します。

-mark-generated

このオプションは、生成されたコードに注釈@javax.annotation.Generatedを付けます。

-Xinject-code

このオプションは、生成されたコードに指定のJavaコードを挿入します。

-episode file

このオプションは、個々のコンパイルごとに指定されたエピソード・ファイルを生成します。

-XLocator

このオプションにより、生成されたコードでは、アンマーシャリング後にJava Beanインスタンスに含まれるソースXMLに関するSimple API for XML (SAX) Locator情報が公開されます。

-Xsync-methods

このオプションは、生成されたすべてのメソッド・シグニチャにsynchronizedキーワードが含められます。

xjcコマンドの非推奨オプションおよび削除されたオプション

-hostおよび-port

これらのオプションは、-httpproxyオプションで置き換えられました。これらのオプションは、下位互換性を確保する目的でサポートされていますが、ドキュメントには記載されず、将来のリリースで削除される可能性があります。

-use-runtime

JAXB 2.0仕様で移植性のあるランタイム環境が規定されたため、JAXBリファレンス実装が**/impl/runtimeパッケージを生成する必要がなくなりました。このため、このスイッチは不要となり、削除されました。

-source

-source互換性スイッチは、JAXB 2.0の最初のEarly Access版で導入されました。このスイッチは、JAXB 2.0の今後のリリースから削除されます。1.0.nコードを生成する必要がある場合は、1.0.nコード・ベースのインストールを使用してください。

xjcコマンドのコンパイラの制限事項

通常は、関連するすべてのスキーマを、同じバインディング・コンパイラ・スイッチを指定して1つの単位としてコンパイルするのが最も安全です。xjcコマンドを実行するときは、次のリストに示す制限に注意してください。このような問題のほとんどは、xjcコマンドを複数回呼び出して複数のスキーマをコンパイルする場合にのみ当てはまります。

複数のスキーマを同時にコンパイルする場合は、ターゲットのJavaパッケージ名に次の優先順位の規則が適用されることに注意してください。

1. -pオプションがもっとも優先されます。

2. jaxb:packageのカスタマイズがある場合。

3. targetNamespaceが宣言されている場合は、仕様に定義されているJavaパッケージ名のアルゴリズムにtargetNamespaceを適用します。

4. targetNamespaceが宣言されていない場合は、generatedという名前のハードコードされたパッケージを使用します。

ネームスペースごとに複数のjaxb:schemaBindingsを持つことができないため、同じターゲット・ネームスペースにある2つのスキーマを異なるJavaパッケージにコンパイルすることはできません。

同じJavaパッケージにコンパイルされるスキーマはすべて、同時にXJCバインディング・コンパイラに送信される必要があります。個別にコンパイルできないため、想定したとおりに動作しません。

複数のスキーマ・ファイルにまたがる要素置換グループは、同時にコンパイルされる必要があります。

11 Java Accessibilityユーティリティおよびコマンド

Java Access Bridge 2.0.2には、Java仮想マシン(JVM)のオブジェクトおよび特定のJava仮想マシンのコンポーネント・ツリーに関するアクセス可能な情報を調べるためにJava Accessibilityユーティリティが組み込まれています。

次の各トピックでは、Java Accessibilityユーティリティとそのコマンドについて説明します。

- jaccessinspector: Java AccessibilityユーティリティAPI用のjaccessinspectorアクセシビリティ評価ツールは、Java仮想マシンのオブジェクトに関するアクセス可能な情報を調べる場合に使用します。

- jaccesswalker: jaccesswalkerは、特定のJava仮想マシンのコンポーネント・ツリーをナビゲートしたり、ツリー・ビューの階層を表示する場合に使用します。

jaccessinspector

Java AccessibilityユーティリティAPI用のjaccessinspectorアクセシビリティ評価ツールは、Java仮想マシンのオブジェクトに関するアクセス可能な情報を調べる場合に使用します。

説明

jaccessinspectorツールを使用すると、次のような場合に、オブジェクト・アクセシビリティ情報を調べるために様々な方法を選択できます。

- フォーカスの変更、マウスの移動、プロパティ変更、メニュー選択、ポップアップ・メニューの表示といったイベントが発生した場合

- マウスがオブジェクト上にあるときに[F1]キーを押した場合またはマウスがウィンドウ上にあるときに[F2]キーを押した場合

調査対象のオブジェクトが選択されていると、jaccessinspectorツールには、そのオブジェクトに対してJava Accessibility APIメソッドを呼び出した結果が表示されます。

jaccessinspectorツールの実行

jaccessinspectorツールを使用するには、Javaアプリケーションの起動後にjaccessinspector Windowsアプリケーションを起動します。たとえば、jaccessinspectorを起動するには、次のWindowsアプリケーションのいずれかを実行します。

注意:

接尾辞なしバージョンが64ビット版Javaとともにインストールされます。

JAVA_HOMEは環境変数であり、c:\Program Files\Java\jdk-9のように、JDKまたはJREのパスを設定する必要があります。

- 64ビット版Windows:

- %JAVA_HOME%\bin\jaccessinspector.exe: jaccessinspectorは64ビット版の支援テクノロジ・アプリケーションとして、Javaアプリケーションを調べます。

- %JAVA_HOME%\bin\jaccessinspector-32.exe: jaccessinspectorは32ビット版の支援テクノロジ・アプリケーションとして、Javaアプリケーションを調べます。

このとき、Javaアプリケーション・ウィンドウとjaccessinspectorウィンドウの2つのウィンドウが開きます。jaccessinspectorウィンドウには、次の5つのメニューがあります。

- 「File」メニュー

- 「UpdateSettings」メニュー

- 「JavaEvents」メニュー

- 「AccessibilityEvents」メニュー

- 「Options」メニュー

「UpdateSettings」、「JavaEvents」および「AccessibilityEvents」の各メニューの項目を使用すると、様々な方法でJavaアプリケーションに問い合せることができます。

「File」メニュー

この項では、「File」メニューの項目について説明します。

AccessBridge DLL Loaded

AccessBridge DLLのロードを有効または無効にします。

Exit

ツールを終了します。

「UpdateSettings」メニュー

この項では、「UpdateSettings」メニューの項目について説明します。

Update from Mouse

マウスの動きが停止したときにマウスのx座標とy座標を特定し(jaccessinspectorツール・ウィンドウが一番上にあることが前提)、マウスの真下にあるアクセス可能オブジェクトをJavaアプリケーションに問い合せて、出力をjaccessinspectorウィンドウにダンプします。

Update with F2 (Mouse HWND)

マウスのx座標とy座標を特定し(jaccessinspectorツール・ウィンドウが一番上にあることが前提)、マウスの真下にあるHWNDのアクセス可能オブジェクトをJavaアプリケーションに問い合せて、出力をjaccessinspectorウィンドウにダンプします。

Update with F1 (Mouse Point)

マウスのx座標とy座標を特定し(jaccessinspectorツール・ウィンドウが一番上にあることが前提)、カーソルの真下にあるアクセス可能オブジェクトをJavaアプリケーションに問い合せて、出力をjaccessinspectorウィンドウにダンプします。

「JavaEvents」メニュー

この項では、「JavaEvents」メニューの項目について説明します。

Track Mouse Events

すべてのJavaマウス入力イベントをJavaアプリケーションに登録し、受信時に、カーソルで入力されたオブジェクトを問い合せて、出力をjaccessinspectorウィンドウにダンプします。

注意:
マウスを素早く動かすと、表示された情報が更新されるまでに少し時間がかかることがあります。

Track Focus Events

すべてのJavaフォーカス取得イベントをJavaアプリケーションに登録し、イベントの受信時に、フォーカスを受け取ったオブジェクトを問い合せて、出力をjaccessinspectorウィンドウにダンプします。

Track Caret Events

すべてのJavaキャレット更新イベントをJavaアプリケーションに登録し、イベントの受信時に、キャレットが更新されたオブジェクトを問い合せて、出力をjaccessinspectorウィンドウにダンプします。

注意:
キャレットを含むオブジェクトは、定義上ほとんど必然的にリッチ・テキスト・オブジェクトであるため、他のイベント追跡オプションほど反応が早いように見えません。実際の使用では、キャレット更新の場合(たとえば、キャレットの位置にある新しい文字、単語、文を取得するなど)でのアクセシビリティ・コールは少なくなり、大幅に速くなります。

Track Menu Selected | Deselected | Canceled Events

すべてのメニュー・イベントをJavaアプリケーションに登録し、イベントの受信時に、キャレットが更新されたオブジェクトを問い合せて、出力をjaccessinspectorウィンドウにダンプします。

Track Popup Visible | Invisible | Cancelled Events

すべてのポップアップ・メニュー・イベントをJavaアプリケーションに登録し、イベントの受信時に、キャレットが更新されたオブジェクトを問い合せて、出力をjaccessinspectorウィンドウにダンプします。

Track Shutdown Events

Javaアプリケーションが終了したときにプロパティ変更イベントを受信するように、Javaアプリケーションに登録します。

「AccessibilityEvents」メニュー

この項では、「AccessibilityEvents」メニューの項目について説明します。

注意:
「AccessibilityEvents」メニューに表示される項目は、アプリケーション、特に支援テクノロジ・アプリケーションのテストで最も重要です。

Track Name Property Events

特にNameプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をスクロール・ウィンドウにダンプします。

Track Description Property Events

特にDescriptionプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track State Property Events

特にStateプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track Value Property Events

特にValueプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をスクロール・ウィンドウにダンプします。

Track Selection Property Events

特にSelectionプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track Text Property Events

特にTextプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track Caret Property Events

特にCaretプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track VisibleData Property Events

特にVisibleDataプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track Child Property Events

特にChildプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track Active Descendent Property Events

特にActive Descendentプロパティが変更されたアクセス可能オブジェクトに対するすべてのJavaプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

Track Table Model Change Property Events

特にTable Model Changeプロパティが変更されたアクセス可能オブジェクトに対するすべてのプロパティ変更イベントをJavaアプリケーションに登録し、イベントの受信時に、変更されたプロパティに関する情報とともに出力をjaccessinspectorウィンドウにダンプします。

「Options」メニュー

この項では、「Options」メニューの項目について説明します。

Monitor the same events as JAWS

JAWSでもモニターされているイベントのみのモニタリングを有効にします。

Monitor All Events

jaccessinspectorウィンドのすべてのイベントのモニタリングを有効にします。

Reset All Events

選択したオプションをデフォルト設定にリセットします。

Go To Message

メッセージ番号を入力すると記録されたメッセージを表示できる「Go To Message」ダイアログを開きます。

Clear Message History

jaccessinspectorウィンドウから記録されたメッセージの履歴をクリアします。

jaccesswalker

jaccesswalkerは、特定のJava仮想マシンのコンポーネント・ツリーをナビゲートしたり、ツリー・ビューの階層を表示する場合に使用します。

説明

ツリーのノードを選択し、「Panels」メニューから「Accessibility API Panel」を選択します。jaccesswalkerツールは、オブジェクトに関するアクセシビリティ情報をウィンドウに表示します。

jaccesswalkerツールの実行

jaccesswalkerを使用するには、Javaアプリケーションの起動後にjaccesswalker Windowsアプリケーションを起動します。たとえば、jaccesswalkerを起動するには、次のWindowsアプリケーションのいずれかを実行します。

注意:

- 接尾辞なしバージョンが64ビット版Javaとともにインストールされます。

- JAVA_HOMEは環境変数であり、c:\Program Files\Java\jdk-9のように、JDKまたはJREのパスを設定する必要があります。

- 64ビット版Windows:

- %JAVA_HOME%\bin\jaccesswalker.exe: jaccesswalkerは64ビット版の支援テクノロジ・アプリケーションとして、Javaアプリケーションを調べます。

- %JAVA_HOME%\bin\jaccesswalker-32.exe: jaccesswalkerは32ビット版の支援テクノロジ・アプリケーションとして、Javaアプリケーションを調べます。

このとき、Javaアプリケーション・ウィンドウとjaccesswalkerツール用ウィンドウの2つのウィンドウが開きます。jaccesswalker.を使用して実行できるタスクは2つあります。JavaアプリケーションのGUI階層のツリー・ビューを構築することと、GUI階層内の特定の要素のJava Accessibility API情報を問い合せることが可能です。

GUI階層の構築

「File」メニューから、「Refresh Tree」メニューを選択します。jaccesswalkerツールにより、JavaアプリケーションおよびJavaアプレットに属する最上位ウィンドウのリストが作成されます。次に、これらのウィンドウ内の要素の再帰的な問合せが行われ、システムで実行されているすべてのJVMのあらゆるJavaアプリケーションおよびJavaアプレット内の全GUIコンポーネントのツリーが構築されます。

GUIコンポーネントの調査

GUIツリーの構築後、個々のGUIコンポーネントに関する詳細なアクセシビリティ情報を表示するには、ツリーでそのコンポーネントを選択してから「Panels」、「Display Accessibility Information」の順に選択します。

12 トラブルシューティングのツールおよびコマンド

JDKのトラブルシューティングのツールおよびコマンドは、JavaアプリケーションとJava仮想マシン(JVM)をトラブルシューティングするのに使用します。

注意:

試験的と指定されているツールは、サポート対象外なので、将来のJDKリリースで使用できなくなる可能性があります。

次の各項では、JDKのトラブルシューティングのツールおよびコマンドについて説明します。

- jcmd: jcmdユーティリティは、実行中のJava仮想マシン(JVM)に診断コマンド要求を送信する場合に使用します。

- jdb: jdbコマンドとそのオプションは、Javaプラットフォームのプログラムで不具合を検出して修正する場合に使用します。

- jhsdb: jhsdbツールは、Javaプロセスに接続するか、事後デバッガを起動して、クラッシュしたJava仮想マシン(JVM)からのコア・ダンプの内容を分析する場合に使用します。

- jinfo: 試験的 jinfoコマンドは、指定されたJavaプロセスに関するJava構成情報を生成する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jmap: 試験的 jmapコマンドは、指定されたプロセスの詳細を出力する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

- jstack: 試験的 jstackコマンドは、指定されたJavaプロセスに関するJavaスレッドのJavaスタック・トレースを出力する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

jcmd

jcmdユーティリティは、実行中のJava仮想マシン(JVM)に診断コマンド要求を送信する場合に使用します。

形式

jcmd [pid | main-class] command...|PerfCounter.print|
-f filename

jcmd -l

jcmd -h

注意:

jcmdユーティリティとともに使用するJava Flight Recorder (JFR)は、商用製品であり、使用前に有効にする必要があります。JVMが実行されると、jcmdコマンドのVM.unlock_commercial_featuresを使用して商用機能のロックが解除され、JFRコマンド(「jcmdのコマンド」を参照)を使用できるようになります。

pid

使用すると、jcmdユーティリティは、JavaプロセスのプロセスIDに診断コマンド要求を送信します。

main-class

使用すると、jcmdユーティリティは、指定されたメイン・クラス名を持つすべてのJavaプロセスに診断コマンド要求を送信します。

command

commandは、選択されたJVMに対して有効なjcmdコマンドである必要があります。jcmdの有効なコマンドのリストを取得するには、helpコマンド(jcmd pid help)を実行します(pidは実行中のJavaプロセスのプロセスIDです)。pidが0の場合、コマンドはすべてのJavaプロセスに送信されます。メイン・クラス引数は、Javaの起動に使用されるクラスとの部分照合または完全照合に使用されます。オプションが指定されていない場合、プロセスの起動に使用されたメイン・クラス引数およびコマンド行引数とともに、実行中のJavaプロセス識別子をリストします(-lの使用と同様)。

Perfcounter.print

指定されたJavaプロセスによって公開されるパフォーマンス・カウンタを出力します。

—f filename

指定されたファイルfilenameからコマンドを読み取って実行します。

-l

プロセスの起動に使用されたメイン・クラス引数およびコマンド行引数とともに、実行中のJava仮想マシンのプロセス識別子のリストを表示します。

-h

jcmdユーティリティのコマンド行ヘルプを表示します。

説明

jcmdユーティリティは、JVMに診断コマンド要求を送信する際に使用されます。JVMが実行されているものと同じマシン上で使用され、JVMの起動で使用されたものと同じ有効なユーザーおよびグループ識別子を持っている必要があります。診断コマンドには、それぞれ独自の引数セットがあります。診断コマンドで使用可能な引数の説明、構文およびリストを表示するには、コマンド名を引数として使用します。次に例を示します

jcmd pid help command

引数に空白が含まれる場合は、それらを一重引用符または二重引用符('または")で囲む必要があります。さらに、システム・シェルが引用符を処理しないように、一重引用符または二重引用符をバックスラッシュ(\)でエスケープする必要があります。または、これらの引数を一重引用符で囲んでから二重引用符で囲む(または二重引用符で囲んでから一重引用符で囲む)こともできます。

プロセス識別子(pid)またはメイン・クラス(main-class)を1つ目の引数として指定すると、jcmdユーティリティは、指定された識別子を持つJavaプロセスまたは指定されたメイン・クラス名を持つすべてのJavaプロセスに診断コマンド要求を送信します。また、プロセス識別子として0を指定すると、診断コマンド要求を使用可能なすべてのJavaプロセスに送信できます。

引数を付けずに、または-lオプションを指定してjcmdを実行すると、プロセスの起動時に使用されたメイン・クラスおよびコマンド行引数とともに、実行中のJavaプロセス識別子のリストが出力されます。-hまたは-helpオプションを付けてjcmdを実行すると、ツールのヘルプ・メッセージが出力されます。

診断コマンド要求として次のいずれかを使用します。

- Perfcounter.print

- -f filename

- command [arguments]

jcmdのコマンド

commandは、選択されたJVMに対して有効なjcmd診断コマンドである必要があります。jcmdの有効なコマンドのリストを取得するには、helpコマンド(jcmd pid help)を実行します(pidは実行中のJavaプロセスのプロセスIDです)。pidが0の場合、コマンドはすべてのJavaプロセスに送信されます。メイン・クラス引数は、Javaの起動に使用されるクラスとの部分照合または完全照合に使用されます。オプションが指定されていない場合、プロセスの起動に使用されたメイン・クラス引数およびコマンド行引数とともに、実行中のJavaプロセス識別子をリストします(-lの使用と同様)。

次のコマンドを使用できます。

help [options][arguments]

特定のコマンドの詳細情報を表示します。

arguments:

- command name: ヘルプが必要なコマンドの名前(STRING、デフォルト値なし)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- —all: (オプション)すべてのコマンドについてヘルプを表示します(BOOLEAN、false)。

Compiler.codecache

コード・キャッシュ・レイアウトおよび境界を出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

Compiler.codelist

コード・キャッシュ内の有効なすべてのコンパイル済メソッドを出力します。

影響: 中

権限: java.lang.management.ManagementPermission(monitor)

Compiler.queue

コンパイルの待ち行列に入れられたメソッドを出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

Compiler.directives_add <filename> arguments

ファイルからコンパイラ・ディレクティブを追加します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

arguments:

filename: ディレクティブ・ファイルの名前(STRING、デフォルト値なし)

Compiler.directives_clear

すべてのコンパイラ・ディレクティブを削除します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

Compiler.directives_print

すべてのアクティブなコンパイラ・ディレクティブを出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

Compiler.directives_remove

直近に追加されたコンパイラ・ディレクティブを削除します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

GC.class_histogram [options]

Javaヒープの使用状況に関する統計情報を示します。

影響: 高 — Javaヒープ・サイズとJavaコンテンツによって異なります。

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、optionsを指定する必要があります。

options:

- —all: (オプション) 到達不能なオブジェクトを含め、すべてのオブジェクトを検査します(BOOLEAN、false)

GC.class_stats [options] [arguments]

Javaクラス・メタ・データに関する統計情報を示します。

影響: 高 — Javaヒープ・サイズとJavaコンテンツによって異なります。

注意:

keyまたはkey=value構文を使用して、optionsを指定する必要があります。

options:

- —all: (オプション) すべての列を表示します(BOOLEAN、false)

- -csv: (オプション) スプレッドシートについてCSV (カンマ区切り値)形式で出力します(BOOLEAN、false)

- —help: (オプション) すべての列の意味を表示します(BOOLEAN、false)

arguments

- columns: (オプション) 表示されるすべての列のカンマ区切りリスト。指定しない場合、次の列が表示されます。

- InstBytes

- KlassBytes

- CpAll

- annotations

- MethodCount

- Bytecodes

- MethodAll

- ROAll

- RWAll

- Total

(STRING、デフォルト値なし)

GC.finalizer_info

Javaファイナライズ・キューに関する情報を示します。

影響: 中

権限: java.lang.management.ManagementPermission(monitor)

GC.heap_dump [options] [arguments]

JavaヒープのHPROF形式のダンプを生成します。

影響: 高 — Javaヒープ・サイズとJavaコンテンツによって異なります。-allオプションを指定されていないかぎり、フルGCを要求します。

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- —all: [オプション] 到達不能なオブジェクトを含め、すべてのオブジェクトをダンプします(BOOLEAN、false)

arguments:

- filename: ダンプ・ファイルの名前(STRING、デフォルト値なし)

GC.heap_info

Javaヒープの一般情報を示します。

影響: 中

権限: java.lang.management.ManagementPermission(monitor)

GC.run

java.lang.System.gc()を呼び出します。

影響: 中 — Javaヒープ・サイズとJavaコンテンツによって異なります。

GC.run_finalization

java.lang.System.runFinalization()を呼び出します。

影響: 中 — Javaコンテンツによって異なります。

JFR.check [options]

実行中のJFRの記録をチェックします。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- name: (オプション) \"My Recording\"などの記録テキスト、またはすべての記録の表示を省略します(STRING、デフォルト値なし)

- verbose: (オプション) 記録のイベント設定を出力します(BOOLEAN、false)

JFR.configure [options]

Java Flight Recorder (JFR)を構成します

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- repositorypath: (オプション) 次のように、リポジトリのパスを設定します
\My Repository\ (STRING、デフォルト値なし)

- dumppath: (オプション) 次のように、ダンプするパスを設定します
\"My Dump path\" (STRING、デフォルト値なし)

- stackdepth: (オプション) スタックの深さを設定します(JLONG、64)

- globalbuffercount: (オプション) グローバル・バッファの数を設定します(JLONG、32)

- globalbuffersize: (オプション) グローバル・バッファのサイズを設定します(JLONG、524288)

- thread_buffer_size: (オプション) スレッド・バッファのサイズを設定します(JLONG、8192)

- memorysize: (オプション) 全体のメモリー・サイズを設定します(JLONG、16777216)

- threadbufferstodisk: (オプション) ディスクに直接書き込まれるスレッド・バッファを設定します(BOOLEAN、false)

- maxchunksize: (オプション) 個々のディスク・チャンクのサイズを設定します(JLONG、12582 912)

- samplethreads: (オプション) スレッド・サンプリングをアクティブにします(BOOLEAN、true)

JFR.dump [options]

JFR記録の内容をファイルにコピーします。名前または記録IDのいずれかを指定する必要があります。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- name: (オプション) \"My Recording\"などの記録名(STRING、デフォルト値なし)

- filename: 記録データをファイル(\"C:\Users\user\My Recording.jfr\")にコピーします(STRING、デフォルト値なし)

- path-to-gc-roots: (オプション) GCルートのパスを収集します(BOOLEAN、false)

JFR.start [options]

新しいJFR記録を開始します。

影響: 中: 記録の設定に応じて、影響は低から高までの範囲にわたります。

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- name: (オプション) \"My Recording\"など、記録の特定に使用可能な名前(STRING、デフォルト値なし)

- settings: (オプション) 設定ファイル(プロファイルなど)またはデフォルト。JRE _HOME/lib/jfrを参照してください(STRING SET、デフォルト値なし)

- delay: (オプション) 記録開始の秒(s)、分(m)、時間(h)または日(d)単位の遅延時間(5hなど)。(NANOTIME、0)

- duration: (オプション) 秒(s)、分(m)、時間(h)または日(d)単位の記録期間(300sなど)。(NANOTIME、0)

- disk: (オプション) 記録をディスクに残すかどうか(BOOLEAN、デフォルト値なし)

- filename: (オプション) \"C:\Users\user \My Recording.jfr\"などの結果の記録ファイル名(STRING、デフォルト値なし)

- maxage: (オプション) 記録されたデータを(ディスク上に)保存する秒(s)、分(m)、時間(h)または日(d)単位の最大時間(60mなど)または制限なしの場合は0 (NANOTIME、0)

- maxsize: (オプション) (ディスク上に)保存する、KB (k)、MB (M)またはGB (G)単位の最大バイト数(500Mなど)または制限なしの場合は0 (MEMORY SIZE、0)

- dumponexit: (オプション) JVMの停止時に実行中の記録をダンプします(BOOL EAN、デフォルト値なし)

- path-to-gc-roots: (オプション) GCルートのパスを収集します(BOOLEAN、false)

JFR.stop [options]

JFR記録を停止します

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- name: (オプション) 次のような記録テキスト
\"My Recording\" (STRING、デフォルト値なし)

- filename: (オプション) 次のようなファイルに記録データをコピーします
\"C:\Users\user\ My Recording.jfr\" (STRING、デフォルト値なし)

JVMTI.agent_load [arguments]

JVMTIネイティブ・エージェントをロードします。

影響: 低

権限: java.lang.management.ManagementPermission(control)

arguments:

- library path: ロードするJVMTIエージェントの絶対パス。(STRING、デフォルト値なし)

- agent option: (オプション) エージェントに渡すオプションの文字列。(STRING、デフォルト値なし)

JVMTI.data_dump

JVMTIに対してデータ・ダンプ要求を実行するためにJVMに信号を送信します。

影響: 高

権限: java.lang.management.ManagementPermission(monitor)

ManagementAgent.start [options]

リモート管理エージェントを起動します。

影響: 低 — 影響なし

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- config.file: (オプション) com.sun.management.config.fileを設定します(STRING、デフォルト値なし)

- jmxremote.host: (オプション) com.sun.management.jmxremote.hostを設定します(STRING、デフォルト値なし)

- jmxremote.port: (オプション) com.sun.management.jmxremote.portを設定します(STRING、デフォルト値なし)

- jmxremote.rmi.port: (オプション) com.sun.management.jmxremote.rmi.portを設定します(STRING、デフォルト値なし)

- jmxremote.ssl: (オプション) com.sun.management.jmxremote.sslを設定します(STRING、デフォルト値なし)

- jmxremote.registry.ssl : (オプション) com.sun.management.jmxremote.registry.ssl設定します(STRING、デフォルト値なし)

- jmxremote.authenticate: (オプション) com.sun.management.jmxremote.authenticateを設定します(STRING、デフォルト値なし)

- jmxremote.password.file: (オプション) com.sun.management.jmxremote.password.fileを設定します(STRING、デフォルト値なし)

- jmxremote.access.file: (オプション) com.sun.management.jmxremote.acce ss.fileを設定します(STRING、デフォルト値なし)

- jmxremote.login.config: (オプション) com.sun.management.jmxremote.log in.configを設定します(STRING、デフォルト値なし)

- jmxremote.ssl.enabled.cipher.suites: (オプション) com.sun.managementを設定します。

- jmxremote.ssl.enabled.cipher.suite: (STRING、デフォルト値なし)

- jmxremote.ssl.enabled.protocols: (オプション) com.sun.management.jmxr emote.ssl.enabled.protocolsを設定します(STRING、デフォルト値なし)

- jmxremote.ssl.need.client.auth: (オプション) com.sun.management.jmxre mote.need.client.authを設定します(STRING、デフォルト値なし)

- jmxremote.ssl.config.file: (オプション) com.sun.management.jmxremote. ssl_config_fileを設定します(STRING、デフォルト値なし)

- jmxremote.autodiscovery: (オプション) com.sun.management.jmxremote.au todiscoveryを設定します(STRING、デフォルト値なし)

- jdp.port: (オプション) com.sun.management.jdp.portを設定します(INT、デフォルト値なし)

- jdp.address: (オプション) com.sun.management.jdp.address設定します(STRING、デフォルト値なし)

- jdp.source_addr: (オプション) com.sun.management.jdp.source_addr設定します(STR ING、デフォルト値なし)

- jdp.ttl: (オプション) com.sun.management.jdp.ttlを設定します(INT、デフォルト値なし)

- jdp.pause: (オプション) com.sun.management.jdp.pauseを設定します(INT、デフォルト値なし)

- jdp.name: (オプション) com.sun.management.jdp.nameを設定します(STRING、デフォルト値なし)

ManagementAgent.start_local

ローカル管理エージェントを起動します。

影響: 低 — 影響なし

ManagementAgent.status

管理エージェントのステータスを出力します。

影響: 低 — 影響なし

権限: java.lang.management.ManagementPermission(monitor)

ManagementAgent.stop

リモート管理エージェントを停止します。

影響: 低 — 影響なし

Thread.print [options]

スタック・トレースのあるすべてのスレッドを出力します。

影響: 中 — スレッド数によって異なります。

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- -l: (オプション) java.util.concurrentのロックを出力します(BOOLEAN、false)

VM.check_commercial_features

商用機能のステータスを表示します

影響: 低 — 影響なし

VM.unlock_commercial_features

商用機能をロック解除します

影響: 低 — 影響なし

権限: java.lang.management.ManagementPermission(control)

VM.classloader_stats

すべてのクラスローダーに関する統計情報を出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

VM.class_hierarchy [options] [arguments]

ロードされたすべてのクラスのリストを、クラス階層を示すようにインデントして出力します。各クラスの名前の後にそのクラスローダーのClassLoaderData*か、ブートストラップ・クラス・ローダーでロードされている場合は"null"が表示されます。

影響: 中 — ロードされたクラスの数によって異なります。

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- -i: (オプション) 継承されたインタフェースを出力するかどうか。(BOOLEAN、false)

- -s: (オプション) クラス名が指定されている場合は、サブクラスを出力します。クラス名が指定されていない場合は、スーパークラスのみを出力します。(BOOLEAN、false)

arguments

- classname: (オプション) 階層を出力するクラスの名前。指定されていない場合、すべてのクラス階層を出力します。(STRING、デフォルト値なし)

VM.command_line

このVMインスタンスの起動に使用されるコマンド行を出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

VM.dynlibs

ロードされた動的ライブラリを出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

VM.info

JVM環境およびステータスに関する情報を出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

VM.log [options]

現在のログ構成のリスト、ログ出力の有効化、無効化または構成、すべてのログのローテーションを行います。

影響: 低

権限: java.lang.management.ManagementPermission(control)

options:

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

- output: (オプション) 構成する出力の名前または索引(#)。(STRING、デフォルト値なし)

- output_options: (オプション) 出力のオプション。(STRING、デフォルト値なし)

- what: (オプション) 記録するタグを構成します。(STRING、デフォルト値なし)

- decorators: (オプション) 使用するデコレータを構成します。すべて削除する場合は、'none'または空の値を使用します。(STRING、デフォルト値なし)

- disable: (オプション) すべてのロギングをオフにし、ログ構成をクリアします。(BOOLEAN、デフォルト値なし)

- list: (オプション) 現在のログ構成をリストします。(BOOLEAN、デフォルト値なし)

- rotate: (オプション) すべてのログをローテーションします。(BOOLEAN、デフォルト値なし)

VM.flags [options]

VMフラグ・オプションとその現行値を出力します。

影響: 低

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- -all: (オプション) VMでサポートされているすべてのフラグを出力します(BOOLEAN、false)。

VM.native_memory [options]

ネイティブ・メモリー使用状況を出力します

影響: 中

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- summary: (オプション) 現在のメモリーのサマリーをレポートするようにランタイムに要求します。サマリーには予約済およびコミット済メモリーの合計とともに、各サブシステム別のメモリー使用量のサマリーが含まれます。(BOOLEAN、false)

- detail: (オプション) 各コールサイト別に1K以上のメモリー割当てをレポートするようにランタイムに要求します。(BOOLEAN、false)

- baseline: (オプション) 現在のメモリー使用状況のベースラインをランタイムに要求します。これにより、後で比較できます。(BOOLEAN、false)

- summary.diff: (オプション) 前回ベースラインとのメモリーのサマリー比較をレポートするようにランタイムに要求します。(BOOLEAN、false)

- detail.diff: (オプション) 前回ベースラインとのメモリーの詳細比較をレポートするようにランタイムに要求します。これには、それぞれのコールサイトでのメモリー割当てアクティビティが表示されます。(BOOLEAN、false)

- shutdown: (オプション) ランタイム自体を停止し、ランタイムで使用したメモリーを解放するようにランタイムに要求します。(BOOLEAN、false)

- statistics: (オプション) チューニング目的用にトラッカの統計情報を出力します。(BOOLEAN、false)

- scale: (オプション) KB、MBまたはGB単位のメモリー使用量(STRING、KB)

VM.print_touched_methods

このJVMの存続期間中にアクセスされたすべてのメソッドを出力します。

影響: 中 — Javaコンテンツによって異なります。

VM.set_flag [arguments]

指定された値を使用してVMフラグ・オプションを設定します。

影響: 低

権限: java.lang.management.ManagementPermission(control)

arguments:

- flag name: 設定するフラグの名前(STRING、デフォルト値なし)

- string value: (オプション) 設定する値(STRING、デフォルト値なし)

VM.stringtable [options]

文字列表をダンプします。

影響: 中 — Javaコンテンツによって異なります。

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- -verbose: (オプション) 表内の各文字列の内容をダンプします(BOOLEAN、false)

VM.symboltable [options]

シンボル表をダンプします。

影響: 中 — Javaコンテンツによって異なります。

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- -verbose: (オプション) 表内の各シンボルの内容をダンプします(BOOLEAN、false)

VM.systemdictionary

ディクショナリ・ハッシュ表サイズおよびバケット長の統計情報を出力します。

影響: 中

権限: java.lang.management.ManagementPermission(monitor)

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- verbose: (オプション) すべてのクラス・ローダーについて各ディクショナリ・エントリの内容をダンプします(BOOLEAN、false)。

VM.system_properties

システム・プロパティを出力します。

影響: 低

権限: java.util.PropertyPermission(*, read)

VM.uptime [options]

VMの稼働時間を出力します。

影響: 低

注意:

keyまたはkey=value構文を使用して、次のoptionsを指定する必要があります。

options:

- -date: (オプション) 現在日付を先頭に追加します(BOOLEAN、false)

VM.version

JVMバージョン情報を出力します。

影響: 低

権限: java.util.PropertyPermission(java.vm.version, read)

jdb

jdbコマンドとそのオプションは、Javaプラットフォームのプログラムで不具合を検出して修正する場合に使用します。

形式

jdb [options] [classname] [arguments]

options

これは、jdbコマンド行オプションです。「jdbコマンドのオプション」を参照してください。

classname

これは、デバッグされるメイン・クラスの名前です。

arguments

これは、クラスのmain()メソッドに渡される引数です。

説明

Javaデバッガ(JDB)は、Javaクラス用の簡単なコマンド行デバッガです。JDBは、jdbコマンドとそのオプションによって呼び出されます。jdbコマンドは、Java Platform Debugger Architectureのデモを示し、ローカルまたはリモートのJVMの検査とデバッグを提供します。

JDBセッションを開始します。

JDBセッションを開始するには様々な方法があります。最も頻繁に使用されるのは、デバッグ対象のアプリケーションのメイン・クラスを使用して、JDBから新しいJVMを起動する方法です。これを行うには、コマンド行でjavaコマンドの代わりにjdbコマンドを入力します。たとえば、アプリケーションのメイン・クラスがMyClassの場合は、JDB環境でデバッグするときに次のコマンドを使用します。

jdb MyClass

この方法で起動すると、jdbコマンドは、指定されたパラメータを使用して2つ目のJVMを呼び出し、指定されたクラスをロードし、JVMを停止してから、そのクラスの最初の命令を実行します。

jdbコマンドのもう1つの使用方法は、すでに実行しているJVMに接続する方法です。JVMの実行中にjdbコマンドが接続するJVMを起動するための構文は、次のとおりです。これは、インプロセス・デバッグ用ライブラリをロードし、接続の種類を指定します。

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass

その後、次のコマンドを使用して、jdbコマンドをJVMに接続できます。

jdb -attach 8000

8000は、実行中のJVMのアドレスです。

この場合、jdbコマンドは新しいJVMを起動するかわりに既存のJVMに接続するため、jdbコマンド行にはMyClass引数が指定されません。

デバッガをVMに接続するには他にも様々な方法があり、すべてjdbコマンドでサポートされています。接続オプションについては、Java Platform Debugger Architectureのドキュメントを参照してください。

ブレークポイント

ブレークポイントは、行番号またはメソッドの最初の命令でJDBに設定できます。次に例を示します。

- コマンドstop at MyClass:22は、MyClassが含まれるソース・ファイルの22行目の最初の命令にブレークポイントを設定します。

- コマンドstop in java.lang.String.lengthは、java.lang.String.lengthメソッドの先頭にブレークポイントを設定します。

- コマンドstop in MyClass.<clinit>は、<clinit>を使用してMyClassの静的初期化コードを識別します。

メソッドがオーバーロードされている場合は、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択できるようにする必要があります。たとえば、MyClass.myMethod(int,java.lang.String)またはMyClass.myMethod()と指定します。

clearコマンドは、clear MyClass:45のような構文を使用してブレークポイントを削除します。引数を付けずにclearまたはstopコマンドを使用すると、現在設定されているすべてのブレークポイントのリストが表示されます。contコマンドは実行を継続します。

ステップ実行

stepコマンドは、現在のスタック・フレーム内と呼び出されたメソッド内のどちらにあるのかに関係なく、次の行に実行を進めます。nextコマンドは、現在のスタック・フレームの次の行を実行します。

例外

スローしているスレッドの呼出しスタック内のどこにもcatch文がない場合に例外が発生すると、JVMは通常、例外トレースを出力して終了します。ただし、JDB環境で実行している場合は、例外が発生するとJDBに制御が戻ります。次に、jdbコマンドを使用して例外の原因を診断できます。

たとえば、catch java.io.FileNotFoundExceptionまたはcatch mypackage.BigTroubleExceptionのようにcatchコマンドを使用すると、デバッグ対象のアプリケーションは他の例外がスローされたときに停止します。例外が特定のクラスまたはサブクラスのインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。

ignoreコマンドを使用すると、以前のcatchコマンドの効果が無効になります。ignoreコマンドでは、デバッグ対象のJVMで特定の例外が無視されず、デバッガのみが無視されます。

jdbコマンドのオプション

コマンド行でjavaコマンドのかわりにjdbコマンドを使用すると、jdbコマンドは、javaコマンドと同じ数のオプションを受け入れます。

jdbコマンドでは、次のオプションが受け入れられます。

-help

ヘルプ・メッセージを表示します。

-sourcepath dir1:dir2: . . .

指定されたパスを使用して、指定されたパス内のソース・ファイルを検索します。このオプションが指定されていない場合は、デフォルト・パスであるドット(.)を使用します。

-attach address

デフォルトの接続メカニズムを使用して、実行中のJVMにデバッガを接続します。

-listen address

実行中のJVMが標準のコネクタを使用して指定されたアドレスに接続するまで待機します。

-listenany

実行中のJVMが標準のコネクタを使用して使用可能な任意のアドレスに接続するのを待機します。

-launch

デバッグ対象のアプリケーションをjdbコマンドの起動直後に起動します。-launchオプションを指定すれば、runコマンドを使用する必要がなくなります。デバッグ対象のアプリケーションは、起動後、初期アプリケーション・クラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、contコマンドを使用して実行を継続できます。

-listconnectors

このJVMで使用できるコネクタをリストします。

-connect connector-name:name1=value1....

指定のコネクタおよび一覧表示された引数の値を使用して、ターゲットJVMに接続します。

-dbgtrace [flags]

jdbコマンドのデバッグに関する情報を出力します。

-tclient

Java HotSpot VMクライアントでアプリケーションを実行します。

-tserver

Java HotSpot VMサーバーでアプリケーションを実行します。

-Joption

JVMにoptionを渡します。ここでoptionは、Javaアプリケーションランチャのリファレンス・ページに記載されているいずれかのオプションです。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。「javaのオプションの概要」を参照してください。

次のオプションは、デバッガ・プロセスに転送されます。

-v -verbose[:class|gc|jni]

冗長モードにします。

-Dname=value

システム・プロパティを設定します。

-classpath dir

クラスが検索されるディレクトリをコロンで区切ったリストを表示します。

-X option

非標準のターゲットJVMオプションです。

デバッガとデバッグ対象のJVMを接続するための代替メカニズムを提供するために、その他のオプションもサポートされています。

jhsdb

jhsdbツールは、Javaプロセスに接続するか、事後デバッガを起動して、クラッシュしたJava仮想マシン(JVM)からのコア・ダンプの内容を分析する場合に使用します。

形式

jhsdb clhsdb [--pid pid | --exe executable --core coredump]

jhsdb debugd [options] pid [server-id]|[option] executable core [server-id]

jhsdb hsdb [--pid pid | --exe executable --core coredump]

jhsdb jstack [--pid pid | --exe executable --core coredump] [options]

jhsdb jmap [--pid pid | --exe executable --core coredump] [options]

jhsdb jinfo [--pid pid | --exe executable --core coredump] [options]

jhsdb jsnap [options] [--pid pid | --exe executable --core coredump]

pid

jhsdbツールの接続先となるプロセスIDです。プロセスはJavaプロセスである必要があります。マシン上で実行されているJavaプロセスのリストを取得するには、jpsコマンドを使用します。

server-id

複数のデバッグ・サーバーが同一のリモート・ホストで実行している場合に使用するオプション固有のIDです。

executable

コア・ダンプの作成元となるJava実行可能ファイルです。

core

jhsdbツールの接続先となるコア・ファイルです。

options

jhsdbモードでのコマンド行オプションです。「jhsdbモードの共通オプション」、「debugdモードのオプション」、「jinfoモードのオプション」、「jmapモードのオプション」、「jmapモードのオプション」、「jstackモードのオプション」および「jsnapモードのオプション」を参照してください。

注意:

pidまたはexecutableファイル/coreファイルのペアを指定する必要があります。

説明

jhsdbツールは、Javaプロセスに接続するか、事後デバッガを起動して、クラッシュしたJava仮想マシン(JVM)からのコア・ダンプの内容を分析する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

注意:

jhsdbツールをライブ・プロセスに接続すると、プロセスはハングし、デバッガによる切離しの際にクラッシュする可能性があります。

jhsdbツールは、次のモードのいずれかで起動できます。

jhsdb clhsdb

対話型コマンド行デバッガを起動します。

jhsdb debugd

リモート・デバッグ・サーバーを起動します。

jhsdb hsdb

対話型GUIデバッガを起動します。

jhsdb jstack

スタックおよびロック情報を出力します。

jhsdb jmap

ヒープ情報を出力します。

jhsdb jinfo

基本JVM情報を出力します。

jhsdb jsnap

パフォーマンス・カウンタ情報を出力します。

jhsdbモードの共通オプション

必須のjstack、jmap、jinfoまたはjsnapモード固有のオプションに加えて、pid、exeまたはcoreオプションは、すべてのモードに対して指定する必要があります。次のオプションは、すべてのモードで使用できます。

--pid

ハング中のプロセスのプロセスID。

--exe

実行可能ファイル名。

--core

コア・ダンプ・ファイル名。

--help

コマンドで使用可能なオプションを表示します。

debugdモードのオプション

server-id

このデバッグ・サーバーのオプションの一意のID。これは、複数のデバッグ・サーバーが同一のマシン上で実行されている場合、必須です。

jinfoモードのオプション

オプションが指定されていないと、jhsdb jinfoは、フラグとプロパティの両方を出力します。

--flags

VMフラグを出力します。

--sysprops

Javaシステム・プロパティを出力します。

オプションなし

VMフラグおよびJavaシステム・プロパティを出力します。

jmapモードのオプション

次のモード固有のオプションに加えて、pid、exeまたはcoreオプション(「jhsdbモードの共通オプション」を参照)を指定する必要があります。

オプションなし

Solarisのpmapと同じ情報を出力します。

--heap

javaヒープ・サマリーを出力します。

--binaryheap

javaヒープをhprofバイナリ形式でダンプします。

--dumpfile

ダンプファイルの名前を出力します。

--histo

javaオブジェクト・ヒープのヒストグラムを出力します。

--clstats

クラス・ローダーの統計情報を出力します。

--finalizerinfo

ファイナライズを待機しているオブジェクトに関する情報を出力します。

jstackモードのオプション

次のモード固有のオプションに加えて、pid、exeまたはcoreオプション(「jhsdbモードの共通オプション」を参照)を指定する必要があります。

--locks

java.util.concurrentのロック情報を出力します。

--mixed

javaと、プラットフォームで使用できる場合はネイティブ・フレームの両方を出力しようとします。

jsnapモードのオプション

次のモード固有のオプションに加えて、pid、exeまたはcoreオプション(「jhsdbモードの共通オプション」を参照)を指定する必要があります。

--all

すべてのパフォーマンス・カウンタを出力します。

jinfo

jinfoコマンドは、指定されたJavaプロセスに関するJava構成情報を生成する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

形式

jinfo [option] pid

option

これは、jinfoコマンド行オプションです。「jinfoコマンドのオプション」を参照してください。

pid

出力される構成情報のプロセスIDです。プロセスはJavaプロセスである必要があります。マシン上で実行されているJavaプロセスのリストを取得するには、jpsコマンドを使用します。

説明

jinfoコマンドは、指定されたJavaプロセスに関するJava構成情報を出力します。構成情報は、Javaシステム・プロパティとJVMコマンド行フラグで構成されます。指定したプロセスが64ビット版のJVMで実行されている場合は、-J-d64オプションの指定が必要になることがあります。次に例を示します。

jinfo -J-d64 -sysprops pid

このコマンドはサポート対象外であり、将来のJDKリリースでは利用できなくなる可能性があります。dbgeng.dllが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。PATH環境変数に、ターゲット・プロセスで使用されるjvm.dllの場所またはコア・ダンプ・ファイルが生成された場所を含めてください。

jinfoコマンドのオプション

注意:

次のオプションのいずれも使用しない場合、コマンド行フラグとシステム・プロパティの名前/値ペアの両方が出力されます。

-flag name

指定されたコマンド行フラグの名前と値を出力します。

-flag [+|-]name

指定されたブール型のコマンド行フラグを有効または無効にします。

-flag name=value

指定されたコマンド行フラグを指定された値に設定します。

-flags

JVMに渡されたコマンド行フラグを出力します。

-sysprops

Javaシステム・プロパティを名前と値のペアとして出力します。

-hまたは-help

ヘルプ・メッセージを出力します。

jmap

jmapコマンドは、指定されたプロセスの詳細を出力する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

形式

jmap [options] pid

options

これは、jmapコマンド行オプションです。「jmapコマンドのオプション」を参照してください。

pid

optionsで指定された情報が出力されるプロセスID。プロセスはJavaプロセスである必要があります。マシン上で実行されているJavaプロセスのリストを取得するには、jpsコマンドを使用します。

説明

jmapコマンドは、指定された実行中のプロセスの詳細を出力します。

注意:

このコマンドはサポート対象外であり、将来のJDKリリースでは利用できなくなる可能性があります。dbgeng.dllファイルが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。PATH環境変数に、ターゲット・プロセスで使用されるjvm.dllファイルの場所またはコア・ダンプ・ファイルが生成された場所を含めてください。

jmapコマンドのオプション

-clstats pid

実行中のプロセスに接続し、Javaヒープのクラス・ローダーの統計情報を出力します。

-finalizerinfo pid

実行中のプロセスに接続し、ファイナライズを待機しているオブジェクトに関する情報を出力します。

-histo[:live] pid

実行中のプロセスに接続し、Javaオブジェクト・ヒープのヒストグラムを出力します。liveサブオプションが指定された場合、ライブ・オブジェクトのみをカウントします。

-dump:dump options pid

実行中のプロセスに接続し、Javaヒープをダンプします。dump optionsには、次のものがあります。

- live — 指定されている場合、ライブ・オブジェクトのみをダンプします。指定されていない場合、ヒープ内のすべてのオブジェクトをダンプします。
format=b — Javaヒープをhprofバイナリ形式でダンプします

- file=filename — ヒープをfilenameにダンプします

例: jmap -dump:live,format=b,file=heap.bin pid

jstack

jstackコマンドは、指定されたJavaプロセスに関するJavaスレッドのJavaスタック・トレースを出力する場合に使用します。このコマンドは試験的なものであり、サポート対象外になっています。

形式

jstack [options] pid

options

これは、jstackコマンド行オプションです。「jstackコマンドのオプション」を参照してください。

pid

出力されるスタック・トレースのプロセスIDです。プロセスはJavaプロセスである必要があります。マシン上で実行されているJavaプロセスのリストを取得するには、jpsコマンドを使用します。

説明

jstackコマンドは、指定されたJavaプロセスに関するJavaスレッドのJavaスタック・トレースを出力します。Javaフレームごとに、完全なクラス名、メソッド名、バイト・コード・インデックス(BCI)および行番号(使用可能な場合)が出力されます。C++分解名は分解解除されません。C++名を分解解除するために、このコマンドの出力をc++filtにパイプで渡すことができます。指定したプロセスが64ビット版のJVMで実行されている場合は、-J-d64オプション(例: jstack -J-d64pid)の指定が必要になることがあります。

注意:

このコマンドはサポート対象外であり、将来のJDKリリースでは利用できなくなる可能性があります。dbgeng.dllファイルが存在していないWindowsシステムでは、Debugging Tools For Windowsをインストールしないとこれらのツールが正常に動作しません。PATH環境変数に、ターゲット・プロセスで使用されるjvm.dllの場所またはコア・ダンプ・ファイルが生成された場所を含める必要があります。

jstackコマンドのオプション

-l

長形式のリスト・オプションは、ロックに関する追加情報を出力します。

-hまたは—help

ヘルプ・メッセージを出力します。

13 スクリプト・コマンド

JDKコマンドは、Javaプラットフォームと対話するスクリプトを実行するのに使用します。

注意:

試験的と指定されているコマンドは、サポート対象外なので、将来のJDKリリースで使用できなくなる可能性があります。

次の各項では、スクリプトの実行に使用するコマンドについて説明します。

- jjs: jjsコマンド行ツールは、Nashornエンジンを起動する場合に使用します。

- jrunscript: 試験的 jrunscriptコマンドは、対話型モードおよびバッチ・モードがサポートされるコマンド行スクリプト・シェルを実行する場合に使用します。

jjs

jjsコマンド行ツールは、Nashornエンジンを起動する場合に使用します。

形式

jjs [options] script-files [-- arguments]

options

これは、jjsコマンドの1つ以上のオプションを空白で区切ったものです。「jjsコマンドのオプション」を参照してください。

script-files

これは、Nashornエンジンを使用して解析する1つ以上のスクリプト・ファイルを空白で区切ったものです。ファイルを指定しない場合は、対話型シェルが起動されます。

arguments

二重ハイフンのマーカー(--)の後ろにある値はすべて、引数としてスクリプトまたは対話型シェルに渡されます。これらの値には、argumentsプロパティを使用することでアクセスできます。

説明

jjsコマンド行ツールは、Nashornエンジンを起動するために使用されます。このツールを使用すると、1つまたは複数のスクリプト・ファイルを解析したり、対話型シェルを実行したりできます。

jjsコマンドのオプション

jjsコマンドのオプションによって、Nashornエンジンでスクリプトが解析される条件が制御されます。

-Dname=value

プロパティ名に値を割り当てることで、スクリプトに渡されるシステム・プロパティを設定します。次の例は、Nashornエンジンを対話型モードで起動し、myKeyという名前のプロパティにmyValueを割り当てる方法を示しています。

>> jjs -DmyKey=myValue
jjs> java.lang.System.getProperty("myKey")
myValue
jjs>

このオプションを繰り返すと、複数のプロパティを設定できます。

--add-modules modules

rootユーザーJavaモジュールを指定します。

-cp pathまたは-classpath path

サポートするクラス・ファイルへのパスを指定します。複数のパスを設定するには、このオプションを繰り返すか、または各パスを次の文字で区切ります。

- Oracle Solaris、LinuxおよびOS X: コロン(:)

- Windows: セミコロン(;)

-doe=[true|false] or -dump-on-error=[true|false]

エラーが発生したときに完全なスタック・トレースを提供します。デフォルトでは、簡単なエラー・メッセージのみが出力されます。デフォルト・パラメータはfalseです。

-fv=[true|false] or -fullversion=[true|false]

完全なNashornバージョン文字列を出力します。デフォルト・パラメータはfalseです。

-fx=[true|false]

スクリプトをJavaFXアプリケーションとして起動します。デフォルト・パラメータはfalseです。

-h または-help

オプションとその説明のリストを出力します。

--language=[es5|es6]

ECMAScript言語バージョンを指定します。デフォルトのバージョンはES5です。

--module-path path

ユーザーJavaモジュールの検索場所を指定します。

-ot=[true|false]または-optimistic-types=[true|false]

再コンパイルの最適化を解除してオプティミスティック・タイプ仮定を有効または無効にします。これにより、コンパイラは、コンパイル時にタイプが証明できないプログラム・シンボルに対して、可能なかぎり狭くプリミティブにタイプ付けしようとします。シンボルのタイプが狭すぎるためにランタイムでエラーが発生した場合は、安定したステージに達するまでより広いメソッドが生成されます。これは、可能なかぎり最適なJavaバイトコードが生成される一方で、誤ったタイプ推測によってウォームアップが長くなります。現在、オプティミスティック・タイプ付けはデフォルトで有効になっていますが、起動時のパフォーマンスを向上させるために無効にすることができます。デフォルト・パラメータはtrueです。

-scripting=[true|false]

シェルのスクリプト機能を有効にします。デフォルト・パラメータはtrueです。

-strict=[true|false]

一般的なコーディング・エラーを簡単に検出できるように、より厳しく標準(ECMAScript Edition 5.1)に準拠させる厳密モードを有効にします。デフォルト・パラメータはfalseです。

-t=zoneまたは-timezone=zone

スクリプトの実行用に指定したタイムゾーンを設定します。OSに設定され、Dateオブジェクトで使用されているタイムゾーンはオーバーライドされます。デフォルトのゾーンはAmerica/Los_Angelesです。

-v=[true|false]または-version=[true|false]

Nashornバージョン文字列を出力します。デフォルト・パラメータはfalseです。

Nashornを使用してスクリプトを実行する例

jjs script.js

Nashornを対話型モードで実行する例

>> jjs
jjs> println("Hello, World!")
Hello, World!
jjs> quit()
>>

Nashornに引数を渡す例

>> jjs -- a b c
jjs> arguments.join(", ")
a, b, c
jjs>

jrunscript

jrunscriptコマンドは、対話型モードおよびバッチ・モードがサポートされるコマンド行スクリプト・シェルを実行する場合に使用します。注意: このツールは試験的なものであり、サポート対象外になっています。

形式

jrunscript [options] [arguments]

options

これは、使用可能なjrunscriptコマンド行オプションです。「jrunscriptコマンドのオプション」を参照してください。

arguments

引数を使用するときは、オプションまたはコマンド名の直後に記述してください。「引数」を参照してください。

説明

jrunscriptコマンドは、言語に依存しないコマンド行スクリプト・シェルです。jrunscriptコマンドでは、対話型(読取り-評価-出力)モードとバッチ(-fオプション)モードの両方のスクリプト実行がサポートされています。デフォルトの使用言語はJavaScriptですが、-lオプションを使えば他の言語も指定できます。Javaとスクリプト言語との通信を使用することで、jrunscriptコマンドで探求的なプログラミング・スタイルがサポートされます。

JavaScriptが使用される場合、jrunscriptコマンドは、ユーザー定義のスクリプトを評価する前に、特定の組込み関数およびオブジェクト(jrunscript JavaScript組込み関数のAPI仕様を参照)を初期化します。

jrunscriptコマンドのオプション

-cp pathまたは-classpath path

スクリプトがアクセスする必要があるクラス・ファイルの場所を指定します。

-Dname=value

Javaのシステム・プロパティを設定します。

-Jflag

jrunscriptコマンドが実行されているJava仮想マシンに、flagを直接渡します。

-l language

指定されたスクリプト言語を使用します。デフォルトでは、JavaScriptが使用されます。他のスクリプト言語を使用するには、-cpまたは-classpathオプションを使用して、対応するスクリプト・エンジンのJARファイルを指定する必要があります。

-e script

指定されたスクリプトを評価します。このオプションを使えば、コマンド行に完全に指定された1行のスクリプトを実行できます。

-encoding encoding

スクリプト・ファイルを読み取る際に使用する文字エンコーディングを指定します。

-f script-file

指定されたスクリプト・ファイルを評価します(バッチ・モード)。

-f -

対話型モードを開始し、標準入力からスクリプトを読み取って評価します。

-help または -?

ヘルプ・メッセージを表示して、終了します。

-q

使用可能なすべてのスクリプト・エンジンを一覧表示して、終了します。

引数

argumentsが存在していて、かつ-e、-fのいずれのオプションも使用されなかった場合、最初の引数がスクリプト・ファイルとなり、他の引数が存在する場合はスクリプト引数として渡されます。引数および-eまたは-fオプションが使用されている場合は、すべての引数がスクリプト引数として渡されます。引数、-eおよび-fが存在しなかった場合は、対話型モードが使用されます。

インライン・スクリプトを実行する例

jrunscript -e "print('hello world')"
jrunscript -e "cat('http://www.example.com')"

指定された言語を使用し、スクリプト・ファイルを評価する例

jrunscript -l js -f test.js

対話型モードの例

jrunscript
js> print('Hello World\n');
Hello World
js> 34 + 55
89.0
js> t = new java.lang.Thread(function() { print('Hello World\n'); })
Thread[Thread-0,5,main]
js> t.start()
js> Hello World

js>

スクリプト引数を指定してスクリプト・ファイルを実行する

次の例では、test.jsファイルがスクリプト・ファイルです。arg1、arg2,およびarg3引数がスクリプトに渡されます。スクリプトは、これらの引数に引数配列を使用してアクセスできます。

jrunscript test.js arg1 arg2 arg3

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2018, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。