Обработка ошибок PermGen в задаче ant bpelc - PullRequest
2 голосов
/ 11 декабря 2008

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

Обычно это относится к MaxPermSize, выделенному для JVM. Ираклий Надареишвили имеет одно из лучших объяснений ошибок PermGen и руководство по настройке Java HotSpot VMOptions (например, -XX: MaxPermSize = 128M)

В этом случае я быстро сузил проблему до конкретного bpelc ant task

<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

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

1 Ответ

2 голосов
/ 11 декабря 2008

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

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

...