Обработка ошибок PermGen в задаче ant bpelc

Я сталкивался с ошибкой java.lang.OutOfMemoryError: PermGen при компиляции проекта с помощью ant под Linux с jdk 1.5.0_11. тот же проект компилируется под windows без проблем.

Обычно это относится к MaxPermSize, выделенному для JVM. Ираклий Надареишвили имеет одно из лучших объяснений ошибок PermGen и руководство по настройке 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 принимает элемент compilerarg, такой как javac:

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

Так как исправить ошибку для задачи bpelc? Лучшее решение, которое я придумала до сих пор, - это установить переменную среды ANT_OPTS . Это, кажется, избежало проблемы до настоящего времени.

export ANT_OPTS=-XX:MaxPermSize=128m

Кто-нибудь может пролить больше света? Это верное исправление?

10.12.2008 22:26:31
1 ОТВЕТ
РЕШЕНИЕ

Когда bpelcзадача выполняется внутри оригинальной JVM, выполняющей ant, тогда настройка ANT_OPTS(или что-то подобное) является единственным возможным решением.

Одной из таких эквивалентных вещей может быть рефакторинг этой задачи во второй файл сборки ant и запуск ее с использованием отдельной JVM. Не очень хорошо, но в зависимости от вашей среды это может быть легче реализовать.

2
10.12.2008 22:33:32
@Saua спасибо за укрепление! Если мы снова столкнемся с проблемой PermGen, я думаю, что ваше предложение о рефакторинге будет следующим шагом.
tardate 11.12.2008 01:40:26