处理ant bpelc任务中的PermGen错误

时间:2008-12-10 22:26:32

标签: ant bpel

我在使用jdk 1.5.0_11在Linux下使用ant编译项目时遇到了java.lang.OutOfMemoryError:PermGen错误。同一个项目在windows下编译没有问题。

通常这与分配给JVM的MaxPermSize有关。 Irakli Nadareishvili有一个best explanations of PermGen errors和设置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

任何人都可以获得更多光线吗?这是一个肯定的解决办法吗?

1 个答案:

答案 0 :(得分:2)

bpelc任务在运行ant的原始JVM中执行时,设置ANT_OPTS(或等效的东西)是唯一可行的解​​决方案。

一个这样的等价物可能是将该任务重构为第二个ant构建文件并使用单独的JVM运行该文件。不是很好,但根据您的环境,它可能更容易实现。