コンパイルするantスクリプトがあります:
<javac srcdir="${test.src.dir}" destdir="${test.dist.dir}">
...
<compilerarg value="-Xlint:unchecked" />
</javac>
コンパイラのヒープメモリを増やす必要があるため、次の引数をcompileargs
に追加しました。
<compilerarg value="-Xlint:unchecked -Xms128m -Xmx512m" />
しかし、コンソールでエラーが発生します:
[javac] javac: invalid flag: -Xms128m
[javac] Usage: javac <options> <source files>
なぜ起こるのですか? javac
で使用されるメモリを増やすにはどうすればよいですか?
デフォルトでは、<javac>
はAntでインプロセスで実行されます。 JVMプロセスが起動すると、JVMプロセスのXms
およびXmx
を調整できないことは、Javaの一般的な制限です。したがって、エラー表示されているメッセージは、この原則に違反する試みを拒否しているソフトウェアです(役に立たない、わかりにくいエラーメッセージを使用)。
ただし、fork="true"
タグで属性<javac>
を指定すると、新しいXms
およびXms
。これは、fork
がAntに、javac
を実行する新しいJVMサブプロセスを起動するように指示するためです。 JVMプロセスは新しいため、AntにXms
およびXmx
を指定する許容可能な機会を与えます。
次のようなものを試すことができます:
<project name="project" default="all" basedir="[yourvalue]">
<target name="all">
<javac srcdir="[yourvalue]" destdir="[yourvalue]" fork="true">
<!-- javac requires that -Xmx and -Xms be prefixed with -J -->
<compilerarg line="-J-Xms128m -J-Xmx512m" />
</javac>
</target>
</project>
(compilerarg line=""
ではなくcompilerarg value=""
を使用しています。line
属性を使用すると、スペースで区切られた複数の引数を指定できます。value
属性は、単一の引数を渡すためのものです。 )
Antは、分岐した<javac>
が終了するのを待ちます。これは、javac
プロセスが作業を完了した後(つまり、コンパイルした後)に発生します。その後、Antは独自の元のJVMプロセス内でビルドスクリプトの実行を続けます。 Antは、分岐したjavac
が失敗したか成功したかを確認し、この情報に基づいて通常のアクションを実行します。
パフォーマンス
通常は、notfork javac
よりパフォーマンスが高く、代わりに、初期Ant JVM全体の関連メモリ設定を単に調整します。これは多くの場合(常にではありません)、最良の選択です。別のJVMの起動は通常、インプロセスでのjavac
の実行を許可するよりも遅く、多くのメモリを消費するためです。
Antが提供するant.bat
またはant.sh
を使用してAntを起動している場合、AntのXms
およびXmx
を調整する簡単な方法は、環境変数ANT_OPTSを必要な引数が含まれています。環境変数を設定する方法は多数ありますが、ant.bat
を編集するだけで済みます。
set ANT_OPTS=-Xms128m -Xmx512m
やってみました <jvmarg value="-Xmx512m" />
under Java task?デフォルトでは、ANT_OPTS環境変数を使用できます。この example を見つけましたが、あまり有用ではありませんが、build.xmlがあります。 。
Javacのヒープスペースを増やすために、グーグル検索中にこれを見つけました。
<javac fork="true"
srcdir="${basedir}/src"
destdir="${basedir}/build/classes"
classpath="${project.classpath}"
memoryinitialsize="256m"
memorymaximumsize="256m">
</javac>
この link からコピーされます。 forkをtrueに設定することが重要です。
この問題は本当にアリに関係するとは思わない。 javac -Xms128m -Xmx512m
を直接試した場合、同じメッセージが表示されます。
ランタイムシステムに直接フラグを渡すには、-J
オプションを使用する必要があります。例えば.
compilerarg
の-J-Xms128m -J-Xmx512m
だけでなく、-Xms128m -Xmx512m
。
javac -X
は、非標準オプションをコンパイラーに渡すためのものです。コマンドjavac -X
を実行すると、使用した-Xlint
を含む有効なオプションのリストが表示されます。メモリオプションは基盤となるJVMの設定であるため、-J
を使用する必要があります。
代替
memoryInitialSize
タスクにはmemoryMaximumSiz
(-Xms
と同等)およびjavac
e(-Xmx
と同等)オプションがありますので、compilerargs
を使用する代わりにそれらを試してください。
<javac srcdir="${test.src.dir}" destdir="${test.dist.dir}"
memoryInitialSize="128m"
memoryMaximumSize="512m">