Java

説明

実行中の(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属性を介して入力データを送信できます。

Unix系システムでのバックグラウンドプロセスとしてのAntの実行

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"にする必要があり、timeoutinputoutputerrorresult属性とは互換性がありません。
いいえ。デフォルトは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 新しい環境変数が指定されている場合、古い環境を伝播しません。 いいえ。デフォルトはfalsefork="false"の場合は無視されます。
timeout 指定された時間(ミリ秒単位)内に終了しなかった場合、コマンドを停止します。fork="true"の場合にのみこの機能を使用することを強くお勧めします。 いいえ
clonevm trueに設定すると、フォークされたJVMのすべてのシステムプロパティとbootclasspathは、Antを実行しているJVMと同じになります。Ant 1.7以降 いいえ。デフォルトはfalsefork="false"の場合は無視されます。
discardOutput 出力を完全に破棄するかどうか。この設定は、出力をファイルまたはプロパティにリダイレクトする設定とは互換性がありません。
これをtrueに設定すると、エラー出力をファイル、プロパティにリダイレクトするか、logErrorを有効にしない限り、エラー出力も破棄されます。Ant 1.10.10以降
いいえ。デフォルトはfalse
discardError エラー出力を完全に破棄するかどうか。この設定は、エラー出力をファイルまたはプロパティにリダイレクトする設定、およびlogErrorとは互換性がありません。Ant 1.10.10以降 いいえ。デフォルトはfalse

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

arg と jvmarg

ネストされた<arg>要素と<jvmarg>要素を使用して、それぞれJavaクラスとフォークされたJVMの引数を指定します。コマンドライン引数を参照してください。

sysproperty

ネストされた<sysproperty>要素を使用して、クラスに必要なシステムプロパティを指定します。これらのプロパティは、クラスの実行中(AntのJVMまたはフォークされたJVMのいずれか)にJVMで使用可能になります。この要素の属性は、環境変数の属性と同じです。

syspropertyset

Ant 1.6以降.

syspropertysetを使用して、システムプロパティとして使用するプロパティセットを指定できます。

classpath

Javaclasspath属性はパスのような構造であり、ネストされたclasspath要素を介して設定することもできます。

bootclasspath

Ant 1.6以降.

ブートストラップクラスファイルの場所は、このパスのような構造を使用して指定できます。forktrueでない場合、またはターゲットJVMがサポートしていない場合(つまり、Java 1.1の場合)、無視されます。

env

ネストされたenv要素を介して、フォークされたJVMに渡す環境変数を指定できます。execに関するセクションの説明を参照してください。

fork="false"の場合は設定が無視されます。

permissions

Ant 1.6以降.

注記:
Java 18以降のバージョンで実行する場合は、この要素はサポートされなくなりました。permissionsを参照してください。

ネストされたpermissions要素を使用して、クラスの実行中にセキュリティ権限を取り消したり、付与したりできます。詳細については、permissionsを参照してください。

RuntimePermission exitVM権限が付与されていない場合(または取り消されている場合)、System.exit()呼び出しはインターセプトされ、failonerrorで示されているように処理されます。

注記:
Javaランタイムバージョン18より前のバージョンで実行する場合、権限を指定しないと、Antの実行がfailonerrorで示されているように継続または終了するように、一連のデフォルト権限がJava呼び出しに追加されます。デフォルトで付与されていないすべての権限は、既に存在するセキュリティマネージャーによってチェックされます。exitVMは無効になります。

fork="true"の場合は設定が無視されます。

assertions

Ant 1.6以降.

<assertions> サブ要素を使用して、Java 1.4アサーションの有効化を制御できます。

アサーションステートメントは、現在、フォークされていないモードでは無視されます。

redirector

Ant 1.6.2以降

ネストされたI/Oリダイレクターを指定できます。一般的に、リダイレクターの属性は、タスクレベルで使用可能な対応する属性と同じ動作をします。最も注目すべき特殊性は、後方互換性のために<java>属性が保持されることです。ファイルのマッピングはnullソースファイルを使用して行われます。そのため、すべてのマッパータイプが結果を返すわけではありません。結果が返されない場合、リダイレクションの仕様はタスクレベルの属性に戻ります。実際には、inputoutputerror出力ファイルのデフォルトを指定できることを意味します。

エラーと戻りコード

デフォルトでは、<java>の戻りコードは無視されます。または、resultpropertyをプロパティの名前に設定し、結果コードに割り当てることができます(不変性を除きます)。failonerror="true"を設定すると、resultpropertyの唯一可能な値は0です。0以外の応答はエラーとして扱われ、ビルドの終了を意味します。

同様に、failonerror="false"およびfork="false"の場合、<java>0を返す必要があります。そうでなければ、クラスはビルドJVMによって実行されるため、ビルドは終了します。

modulepath

Ant 1.9.7以降

Javamodulepath属性はパスのような構造であり、ネストされたmodulepath要素を介して設定することもできます。

upgrademodulepath

Ant 1.9.7以降

ランタイムイメージでアップグレード可能なモジュールを置き換えるモジュールの場所は、このパスのような構造を使用して指定できます。

JARファイルの実行

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>