Javah

説明

JavaクラスからJNIヘッダーを生成します。

このタスクが実行されると、ネイティブメソッドを実装するために必要なCヘッダーファイルとソースファイルが生成されます。

Java 8以降でビルドする場合は、javacnativeheaderdir属性を使用することを検討してください。これにより、クラスのコンパイルとネイティブヘッダーファイルの生成を1つのステップで実行できます。

注記: javahはJava 9で非推奨となり、Java 10で削除されました。Java 10でjavahを使用しようとすると失敗します。

異なるコンパイラを使用できます。これはimplementation属性またはネストされた要素で選択できます。属性の選択肢は以下のとおりです。

注記: このタスクを使用して複数のファイルで作業する場合、一部のオペレーティングシステムではコマンドラインが長すぎる可能性があります。javahコマンドはjavac(例)のようにコマンド引数ファイルに対応していないため、コンパイルするクラスの数を小さなチャンクに分割することしかできません。

パラメータ

属性 説明 必須
class クラスの完全修飾名(またはカンマで区切られた複数のクラス名) はい
outputFile リストされたすべてのクラスの結果ヘッダーファイルまたはソースファイルをこのファイルに連結します。 2つのうちちょうど1つ
destdir javahがヘッダーファイルまたはスタブファイルを保存するディレクトリを設定します。
force 出力ファイルが常に書き込まれるように指定します(JDK 1.2の外部javahを使用する場合のみ)。 いいえ
old 古いJDK 1.0スタイルのヘッダーファイルが生成されるように指定します(それ以外の場合は、出力ファイルにJNIスタイルのネイティブメソッド関数プロトタイプが含まれます)(JDK 1.2の外部javahを使用する場合のみ)。 いいえ
stubs JavaオブジェクトファイルからC宣言を生成します(oldと共に使用)。 いいえ
verbose javahが生成されたファイルのステータスに関するメッセージを出力するようにします。 いいえ
classpath 使用するクラスパス。 いいえ
bootclasspath ブートストラップクラスファイルの場所。 いいえ
extdirs インストールされた拡張機能の場所。 いいえ
implementation 使用するコンパイラのインプリメンテーション。(有効なコンパイラのリストを参照してください)。 いいえ; 現在のJDKのデフォルトコンパイラがデフォルト。

ネストされた要素として指定されたパラメータ

arg

ネストされた<arg>要素を使用して、コンパイラに追加のコマンドライン引数を指定できます。これらの要素はコマンドライン引数のように指定されますが、特定のコンパイラの実装が使用される場合にのみ引数を有効にするために使用できる追加の属性があります。

属性 説明 必須
value コマンドライン引数を参照してください。 これらのうちちょうど1つ
line
file
path
prefix コマンドライン引数を参照してください。Ant 1.8以降 いいえ
suffix いいえ
implementation 選択されたコンパイラのインプリメンテーションがこの属性の値と一致する場合にのみ、指定された引数を渡します。有効な値は、上記の有効なコンパイラのリストと同じです。 いいえ

implementationclasspath

Ant 1.8.0以降

カスタムクラスが指定されている場合、コンパイラの実装をロードする際に使用するクラスパスを保持するパスのような構造。組み込みのコンパイラの1つを使用する場合は効果がありません。

JavahAdapterを実装するタイプのネストされた要素

Ant 1.8.0以降

定義された型がJavahAdapterインターフェースを実装する場合、その型のネストされた要素をimplementation属性の代わりに使用できます。

指定されたクラスのJNIヘッダーを、JDK 1.2 JNIモデルを使用して作成します。ディレクトリcが既に存在すると仮定すると、ファイルorg_foo_bar_Wibble.hがそこに作成されます。このファイルが既に存在する場合は、変更されません。

<javah destdir="c" class="org.foo.bar.Wibble"/>

これは前の例と似ていますが、出力は現在のディレクトリのwibble.hというファイルに書き込まれます。

<javah outputFile="wibble.h">
  <class name="org.foo.bar.Wibble,org.foo.bar.Bobble"/>
</javah>

3つのヘッダーファイル(名前付きクラスごとに1つ)を書き込みます。forceオプションが設定されているため、これらのヘッダーファイルは、既に存在していても、Javahタスクが呼び出されると常に書き込まれます。

<javah destdir="c" force="yes">
  <class name="org.foo.bar.Wibble"/>
  <class name="org.foo.bar.Bobble"/>
  <class name="org.foo.bar.Tribble"/>
</javah>

'old' JNI形式を使用して3つのクラスのヘッダーを書き込み、対応する.cスタブを書き込みます。verboseオプションにより、Javahは進行状況を説明します。

<javah destdir="c" verbose="yes" old="yes" force="yes">
  <class name="org.foo.bar.Wibble"/>
  <class name="org.foo.bar.Bobble"/>
  <class name="org.foo.bar.Tribble"/>
</javah>
<javah destdir="c" verbose="yes" stubs="yes" old="yes" force="yes">
  <class name="org.foo.bar.Wibble"/>
  <class name="org.foo.bar.Bobble"/>
  <class name="org.foo.bar.Tribble"/>
</javah>

カスタムJavahAdapter org.example.MyAdapterを使用する場合は、implementation属性を使用するか

<javah destdir="c" class="org.foo.bar.Wibble"
       implementation="org.example.MyAdapter"/>

型を定義して、タスクに次のようにネストします。

<componentdef classname="org.example.MyAdapter"
              name="myadapter"/>
<javah destdir="c" class="org.foo.bar.Wibble">
  <myadapter/>
</javah>

その場合、javahアダプターは独自の属性とネストされた要素をサポートできます。