2

jdk 1.5.0_11 を使用して Linux で ant を使用してプロジェクトをコンパイルすると、java.lang.OutOfMemoryError: PermGen エラーが発生しました。同じプロジェクトが Windows で問題なくコンパイルされます。

通常、これは JVM に割り当てられた MaxPermSize に関連しています。Irakli Nadareishvili には、PermGenエラーの最良の説明の1 つと、 Java HotSpot VMOptions (例: -XX:MaxPermSize=128M)の設定ガイドがあります。

この場合、問題を特定のbpelc ant タスクにすばやく絞り込みました。

<bpelc input="${build.dir}/bpel/bpel.xml" 
out="${build.dir}/output" rev="${version}" home="${bpel.home}"/>

現在、bpelc は javac のように compilerarg 要素を取らないと思います:

  <javac srcdir="${src.dir}"
         destdir="${classes.dir}"
         classpathref="libraries">
    <compilerarg value="-XX:MaxPermSize=128M"/>
  </javac> 

では、bpelc タスクのエラーを修正するにはどうすればよいでしょうか? これまでに思いついた最善の解決策は、ANT_OPTS環境変数を設定することです。これにより、現在までの問題は回避されているようです。

export ANT_OPTS=-XX:MaxPermSize=128m

誰かがもっと光を当てることができますか? それは確実な修正ですか?

4

1 に答える 1

2

bpelcAnt を実行している元の JVM 内でタスクが実行される場合、設定ANT_OPTS(または同等のもの) が唯一の可能な解決策です。

そのような同等の方法の 1 つは、そのタスクを 2 番目の ant ビルド ファイルにリファクタリングし、別の JVM を使用して実行することです。それほど良くはありませんが、環境によっては実装が簡単になる場合があります。

于 2008-12-10T22:33:32.547 に答える