実行中の(Apache Ant)JVM内でJavaクラスを実行するか、指定されている場合は別のJVMをフォークします。
このタスクを実行したときに予期せぬ問題が発生した場合は、新しいJVMを使用するためにfork="true"を設定してください。このタスクによって起動されるクラス、またはそのクラスで使用されているライブラリが、java.lang.System.exit()やjava.lang.Runtime.exit()などのAPIを呼び出す場合は、fork="true"を設定する必要があります。
Ant 1.6.3以降、フォークされたJVMとやり取りし、inputおよびinputstring属性を介して入力データを送信できます。
Antをバックグラウンドプロセスとして実行する場合(例:ant &)、<java>タスクでspawn="false"およびfork="true"を設定すると、フォークされたプロセスに明示的に入力を提供する必要があります。そうでなければ、標準入力から読み込もうとするため、Antは中断されます。
| 属性 | 説明 | 必須 |
|---|---|---|
| classname | 実行するJavaクラス。 | 以下の4つのうちいずれか1つ必須 |
| jar | 実行するjarファイルの場所(マニフェストにMain-Classエントリが必要です)。このオプションを選択した場合は、fork="true"にする必要があります。詳細は下記の注記を参照してください。 |
|
| module | 解決する初期またはメインモジュール(マニフェストにMain-Classエントリが必要です)。このオプションを選択した場合は、fork="true"にする必要があります。Ant 1.9.7以降 |
|
| sourcefile | ".java"ファイルまたはJavaソースコードを含むShebangを持つファイルの場所。Java 11で導入された機能である、Java単一ファイルソースプログラムを実行するためにこの属性を設定します。このオプションを選択した場合は、fork="true"にする必要があります。Ant 1.10.5以降 |
|
| args | 実行されるクラスの引数。非推奨、代わりにネストされた<arg>要素を使用してください。 |
いいえ |
| classpath | 使用するクラスパス。 | いいえ |
| classpathref | 使用するクラスパス。他の場所で定義されたPathへの参照として指定します。 |
いいえ |
| modulepath | アプリケーションモジュールを見つける場所を指定します。モジュールのディレクトリ、モジュールファイル、または展開されたモジュールのリストです。Ant 1.9.7以降 | いいえ |
| modulepathref | 使用するmodulepath。他の場所で定義されたPathへの参照として指定します。Ant 1.9.7以降 |
いいえ |
| fork | 有効にすると、別のJVMでクラス実行がトリガーされます。 | いいえ。デフォルトはfalse |
| spawn | 有効にすると、Antよりも長く存続するプロセスを開始できます。fork="true"にする必要があり、timeout、input、output、error、result属性とは互換性がありません。 |
いいえ。デフォルトはfalse |
| jvm | JVMを呼び出すために使用するコマンド。コマンドはjava.lang.Runtime.exec()によって解決されます。fork="false"の場合は無視されます。 |
いいえ、デフォルトはjava |
| jvmargs | フォークされたJVMに渡す引数。forkが無効な場合は無視されます。非推奨、代わりにネストされた<jvmarg>要素を使用してください。 |
いいえ |
| maxmemory | フォークされたJVMに割り当てる最大メモリ量。fork="false"の場合は無視されます。 |
いいえ |
| failonerror | コマンドが0以外の戻りコードで終了した場合、ビルドプロセスを停止します。 |
いいえ。デフォルトはfalse(注記を参照) |
| resultproperty | コマンドの戻りコードを格納するプロパティの名前。failonerror="false"かつfork="true"の場合にのみ意味があります。 |
いいえ |
| dir | JVMを呼び出すディレクトリ。fork="false"の場合は無視されます。 |
いいえ |
| output | 出力を書き込むファイルの名前。エラーストリームもファイルまたはプロパティにリダイレクトされていない場合、この出力に表示されます。 | いいえ |
| error | コマンドの標準エラーをリダイレクトするファイル。 | いいえ |
| logError | Antのログにエラー出力を表示し、出力をファイル/プロパティにリダイレクトする場合に使用します。エラー出力は出力ファイル/プロパティに含まれません。errorまたはerrorProperty属性でエラーをリダイレクトする場合、これは効果がありません。 |
いいえ |
| append | 出力ファイルとエラーファイルを追記するか、上書きするか。 | いいえ。デフォルトはfalse |
| outputproperty | コマンドの出力を格納するプロパティの名前。エラーストリームが別のファイルまたはストリームにリダイレクトされていない限り、このプロパティにはエラー出力が含まれます。 | いいえ |
| errorproperty | コマンドの標準エラーを格納するプロパティの名前。 | いいえ |
| input | 実行されたコマンドの標準入力の取得元となるファイル。この属性はinputstring属性と相互に排他的です。 |
いいえ。spawn="true"でない限り、デフォルトではコンソールから標準入力を取得します。 |
| inputstring | 実行されたコマンドの入力ストリームとして機能する文字列。この属性はinput属性と相互に排他的です。 |
いいえ。spawn="true"でない限り、デフォルトではコンソールから標準入力を取得します。 |
| newenvironment | 新しい環境変数が指定されている場合、古い環境を伝播しません。 | いいえ。デフォルトはfalse。fork="false"の場合は無視されます。 |
| timeout | 指定された時間(ミリ秒単位)内に終了しなかった場合、コマンドを停止します。fork="true"の場合にのみこの機能を使用することを強くお勧めします。 |
いいえ |
| clonevm | trueに設定すると、フォークされたJVMのすべてのシステムプロパティとbootclasspathは、Antを実行しているJVMと同じになります。Ant 1.7以降 |
いいえ。デフォルトはfalse。fork="false"の場合は無視されます。 |
| discardOutput | 出力を完全に破棄するかどうか。この設定は、出力をファイルまたはプロパティにリダイレクトする設定とは互換性がありません。 これを trueに設定すると、エラー出力をファイル、プロパティにリダイレクトするか、logErrorを有効にしない限り、エラー出力も破棄されます。Ant 1.10.10以降 |
いいえ。デフォルトはfalse |
| discardError | エラー出力を完全に破棄するかどうか。この設定は、エラー出力をファイルまたはプロパティにリダイレクトする設定、およびlogErrorとは互換性がありません。Ant 1.10.10以降 |
いいえ。デフォルトはfalse |
ネストされた<arg>要素と<jvmarg>要素を使用して、それぞれJavaクラスとフォークされたJVMの引数を指定します。コマンドライン引数を参照してください。
ネストされた<sysproperty>要素を使用して、クラスに必要なシステムプロパティを指定します。これらのプロパティは、クラスの実行中(AntのJVMまたはフォークされたJVMのいずれか)にJVMで使用可能になります。この要素の属性は、環境変数の属性と同じです。
Ant 1.6以降.
syspropertysetを使用して、システムプロパティとして使用するプロパティセットを指定できます。
Javaのclasspath属性はパスのような構造であり、ネストされたclasspath要素を介して設定することもできます。
Ant 1.6以降.
ブートストラップクラスファイルの場所は、このパスのような構造を使用して指定できます。forkがtrueでない場合、またはターゲットJVMがサポートしていない場合(つまり、Java 1.1の場合)、無視されます。
ネストされたenv要素を介して、フォークされたJVMに渡す環境変数を指定できます。execに関するセクションの説明を参照してください。
fork="false"の場合は設定が無視されます。
Ant 1.6以降.
注記:
Java 18以降のバージョンで実行する場合は、この要素はサポートされなくなりました。permissionsを参照してください。
ネストされたpermissions要素を使用して、クラスの実行中にセキュリティ権限を取り消したり、付与したりできます。詳細については、permissionsを参照してください。
RuntimePermission exitVM権限が付与されていない場合(または取り消されている場合)、System.exit()呼び出しはインターセプトされ、failonerrorで示されているように処理されます。
注記:
Javaランタイムバージョン18より前のバージョンで実行する場合、権限を指定しないと、Antの実行がfailonerrorで示されているように継続または終了するように、一連のデフォルト権限がJava呼び出しに追加されます。デフォルトで付与されていないすべての権限は、既に存在するセキュリティマネージャーによってチェックされます。exitVMは無効になります。
fork="true"の場合は設定が無視されます。
Ant 1.6以降.
<assertions> サブ要素を使用して、Java 1.4アサーションの有効化を制御できます。
アサーションステートメントは、現在、フォークされていないモードでは無視されます。
ネストされたI/Oリダイレクターを指定できます。一般的に、リダイレクターの属性は、タスクレベルで使用可能な対応する属性と同じ動作をします。最も注目すべき特殊性は、後方互換性のために<java>属性が保持されることです。ファイルのマッピングはnullソースファイルを使用して行われます。そのため、すべてのマッパータイプが結果を返すわけではありません。結果が返されない場合、リダイレクションの仕様はタスクレベルの属性に戻ります。実際には、input、output、error出力ファイルのデフォルトを指定できることを意味します。
デフォルトでは、<java>の戻りコードは無視されます。または、resultpropertyをプロパティの名前に設定し、結果コードに割り当てることができます(不変性を除きます)。failonerror="true"を設定すると、resultpropertyの唯一可能な値は0です。0以外の応答はエラーとして扱われ、ビルドの終了を意味します。
同様に、failonerror="false"およびfork="false"の場合、<java>は0を返す必要があります。そうでなければ、クラスはビルドJVMによって実行されるため、ビルドは終了します。
Javaのmodulepath属性はパスのような構造であり、ネストされたmodulepath要素を介して設定することもできます。
ランタイムイメージでアップグレード可能なモジュールを置き換えるモジュールの場所は、このパスのような構造を使用して指定できます。
jar属性のパラメータはFile型です。つまり、パラメータはプロジェクトのベースディレクトリを基準とした絶対ファイルに解決され、Javaタスクが実行されるディレクトリではありません。タスクが実行されるディレクトリを基準にしてJARファイルを見つける必要がある場合は、JARファイルへのフルパスを明示的に作成する必要があります。
jar 属性を使用する場合、Oracle の仕様に従って、すべてのクラスパス設定が無視されます。
クラスパスに新しい jar を追加して、この JVM でクラスを実行する
<java classname="test.Main">
<arg value="-h"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
このプロジェクトの dist/lib ディレクトリにある JAR ファイル test.jar を、マニフェストで指定されたエントリポイントを使用して、必要に応じてフォークし、最大メモリを 128 MB にして実行します。0 以外の戻りコードはビルドを中断します。
<java jar="dist/test.jar"
fork="true"
failonerror="true"
maxmemory="128m">
<arg value="-h"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
JVM の起動ディレクトリである ${exec.dir} ディレクトリを基準とした相対パス dist/test.jar の JAR ファイルを実行します。
<java dir="${exec.dir}"
jar="${exec.dir}/dist/test.jar"
fork="true"
failonerror="true"
maxmemory="128m">
<arg value="-h"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
現在のクラスパスを使用して、特定のクラスを実行します。
<java classname="test.Main"/>
java -Xrunhprof:cpu=samples,file=log.txt,depth=3 -DDEBUG=true test.Main のように、システムプロパティと JVM プロパティを JVM に追加します。
<java classname="test.Main"
fork="yes" >
<sysproperty key="DEBUG" value="true"/>
<arg value="-h"/>
<jvmarg value="-Xrunhprof:cpu=samples,file=log.txt,depth=3"/>
</java>
(Ant が現在使用しているものとは異なる)特定の Java 実装を使用してクラスを実行します。ログのドキュメントでは、taskname を使用して、ログプレフィックス [java] を [java1.4] に変更します。
<java classname="ShowJavaVersion" classpath="."
jvm="path-to-java14-home/bin/java" fork="true"
taskname="java1.4"/>
注記: (非常に非推奨となっている)MS JVM の jview.exe は、他の JVM と異なるパラメータを使用するため、jvm として指定することはできません。必要であれば、<exec> からその JVM を起動できます。
モジュールパス lib/:dist/test.jar で解決されたモジュール TestModule を、最大メモリ 128 MB で実行します。0 以外の戻りコードはビルドを中断します。
<java fork="true"
failonerror="true"
maxmemory="128m"
module="TestModule"
modulepath="lib:dist/test.jar"/>
モジュールパス lib/:dist/test.jar で解決されたモジュール TestModule 内のクラス Main を、最大メモリ 128 MB で実行します。0 以外の戻りコードはビルドを中断します。
<java fork="true"
failonerror="true"
maxmemory="128m"
module="TestModule"
classname="Main">
<modulepath>
<pathelement location="lib"/>
<pathelement location="dist/test.jar"/>
</modulepath>
</java>