rmic(1) Remote Method Invocation (RMI) rmic(1)

# 名前

rmic - Java Remote Method Protocol (JRMP)またはInternet Inter-Orb protocol (IIOP)を使用するリモート・オブジェクトのスタブ、スケルトンおよびTieクラスを生成します。Object Management Group (OMG)インタフェース定義言語(IDL)も生成します

# 概要

```
rmic [ options ] package-qualified-class-names
```

*options*

コマンド行**オプション**。オプションを参照してください。

*package-qualified-class-names*

パッケージを含むクラス名。例: **java.awt.Color**。

# 説明

**非推奨に関する注意:** Java Remote Method Protocol (JRMP)スタブおよびスケルトンの静的な生成のサポートは非推奨になりました。動的に生成されるJRMPスタブをかわりに使用して、JRMPベースのアプリケーションにこのツールを使用する必要性をなくすことをお薦めします。詳細は、**java.rmi.server.UnicastRemoteObject**仕様(http://docs.oracle.com/javase/8/docs/api/java/rmi/server/UnicastRemoteObject.html)を参照してください。

**rmic**コンパイラは、Java Remote Method Protocol (JRMP)とスタブおよびTieクラス・ファイル(IIOPプロトコル)を使用して、リモート・オブジェクトのスタブおよびスケルトン・クラス・ファイルを生成します。リモート・オブジェクトの実装クラスであるこれらのクラス・ファイルは、Javaプログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、**java.rmi.Remote**インタフェースを実装するクラスです。**rmic**コマンドでのクラス名は、そのクラスが**javac**コマンドでコンパイルが成功していて、かつ完全修飾パッケージ名である必要があります。たとえば、次に示すクラス・ファイル名**HelloImpl**で**rmic**コマンドを実行すると、helloサブディレクトリ(クラスのパッケージの名前の付いた)に**HelloImpl\_Stub.class** ファイルが作成されます。

```
rmic hello.HelloImpl


 
```

リモート・オブジェクトのスケルトンはJRMPプロトコル・サーバー側のエンティティで、リモート・オブジェクト実装を呼び出すメソッドを含みます。

リモート・オブジェクトのTieは、スケルトンと同様にサーバー側のエンティティですが、IIOPプロトコルを使用してクライアントと通信します。

スタブとは、リモート・オブジェクトのクライアント側での代理です。スタブは、リモート・オブジェクトのメソッド呼出しを、実物のリモート・オブジェクトが常駐するサーバーと通信する役割を持ちます。したがって、クライアントのリモート・オブジェクトへの参照は、実際はローカル・スタブへの参照となります。

デフォルトで**rmic**コマンドは、1.2 JRMPスタブ・プロトコル・バージョンのみを使用するスタブ・クラスを生成します。これは、**-v1.2**オプションを指定した場合と同じ動作です。リリース5.0以前では**-vcompat**オプションがデフォルトでした。IIOPプロトコル用のスタブおよびTieクラスを生成するには**-iiop**オプションを使用します。オプションを参照してください。

スタブはリモート・インタフェースのみを実装し、リモート・オブジェクトが実装するローカル・インタフェースは実装していません。JRMPスタブはリモート・オブジェクトが実装するリモート・インタフェースと同じものを実装しているので、クライアントは、キャストや型チェックにJavaプログラミング言語に組み込まれた演算子を使用することができます。IIOPの場合は、**PortableRemoteObject.narrow**メソッドを使用する必要があります。

# オプション

-bootclasspath *path*

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

-classpath path

**rmic**コマンドがクラスを探すためのパスを指定します。このオプションは、デフォルトや**CLASSPATH**環境変数設定をオーバーライドします。ディレクトリはコロンで分割します。パスの一般的な形式は**.:&lt;your\_path&gt;**です。例: **.:/usr/local/java/classes**

-d *directory*

生成されたクラス階層の出力先ディレクトリのルートを指定します。このオプションを使用すると、スタブ、スケルトン、およびTieファイルを格納するディレクトリを指定できます。たとえば、次のコマンドはMyClassから導出されたスタブおよびスケルトン・クラスをディレクトリ/java/classes/exampleclassに格納します。

```
rmic -d /java/classes exampleclass.MyClass


 
```

**-d**オプションが指定されていない場合、デフォルトの動作は**-d**が指定されていた場合と同じです。ターゲット・クラスのパッケージ階層が現在のディレクトリに作成され、stub/tie/skeletonファイルが格納されます。以前のリリースの**rmic**コマンドでは、**-d**が指定されていない場合は、パッケージ階層は作成されず、出力ファイルはすべて現在のディレクトリに直接格納されていました。

-extdirs *path*

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

-g

ローカル変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号情報のみ生成されます。

-idl

**rmic**コマンドによって、指定したクラスおよび参照されたクラスのOMG IDLが生成されます。IDLでは、プログラミング言語に依存せずに、宣言するだけでオブジェクトのAPIを指定することができます。IDLは、メソッドおよびデータの仕様として使用します。CORBAバインディングを提供する任意の言語で、メソッドおよびデータの作成および呼出しを行うことができます。これらの言語には、JavaおよびC++が含まれています。http://docs.oracle.com/javase/8/docs/technotes/guides/idl/mapping/jidlMapping.htmlの 「Java IDL: IDL to Java Language Mapping」を参照してください

**-idl**オプションを使用するときには、他のオプションも指定できます。

•既存のスタブ/Tie/IDLが入力クラスよりも新しい場合でも、**-always**または**-alwaysgenerate**オプションは再生成を強制します。

•**-factory**オプションは、生成されたIDLで**factory**キーワードを使用します。

•J**avaPackage\[.class]** **toIDLModule**の**-idlModule**は**IDLEntity**パッケージ・マッピングを指定します。例: **-idlModule** **my.module my::real::idlmod**

•**-idlFile** **fromJavaPackage\[.class] toIDLFile**は**IDLEntity**ファイル・マッピングを指定します。例: **-idlFile test.pkg.X TEST16.idl**

-iiop

**rmic**コマンドによって、JRMPのスタブとスケルトン・クラスのかわりに、IIOPのスタブとTieクラスが生成されます。スタブ・クラスは、リモート・オブジェクトのローカル・プロキシで、クライアントからサーバーに呼出しを送信するときに使用されます。各リモート・インタフェースにはスタブ・クラスが必要です。スタブ・クラスによってリモート・インタフェースが実装されます。クライアントでリモート・オブジェクトを参照するときは、スタブを参照することになります。タイ・クラスは、サーバー側で着呼を処理し、その呼出しを適切な実装クラスにディスパッチするときに使用されます。各実装クラスには、タイ・クラスが必要です。

**-iiop**を使用して**rmic**コマンドを呼び出すと、次の命名規則に準拠したスタブとTieが生成されます。

```
_<implementationName>_stub.class
_<interfaceName>_tie.class


 
```

•**-iiop**オプションを使用するときには、他のオプションも指定できます。

•既存のスタブ/Tie/IDLが入力クラスよりも新しい場合でも、**-always**または**-alwaysgenerate**オプションは再生成を強制します。

•**-nolocalstubs**オプションでは、同じプロセスのクライアントとサーバーに最適化されたスタブは作成されません。

•**-noValueMethods**オプションは**-idl**オプションとともに使用する必要があります。**-noValueMethods**オプションは、送信されるIDLに**valuetype**メソッドおよび初期化子を追加できないようにします。このメソッドおよび初期化子は、valuetypeの場合はオプションです。**-idl**オプションとともに**-noValueMethods**オプションを指定しないかぎり生成されます。

•**-poa**オプションは継承を**org.omg.CORBA\_2\_3.portable.ObjectImpl**から**org.omg.PortableServer.Servant**に変更します。ポータブル・オブジェクト・アダプタ(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に準拠しています。

-J

Javaコマンドとともに使用して、**-J**オプションは**-J**の後ろに続く引数をJavaインタプリタに渡します(**-J**と引数の間にスペースは入れません)。

-keep or -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

ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで区切られます。例: **.:/usr/local/java/classes**

# 関連項目

•[javac(1)](/man/os/openjdk-11/javac.1)

•[java(1)](/man/os/openjdk-11/java.1)

•クラス・パスの設定

2013年11月21日 JDK 8

---

Document: rmic(1) from openjdk-11 11.0.32.1-r3 (Chainguard OS)
Source: https://github.com/openjdk/jdk11u.git
