代码之家  ›  专栏  ›  技术社区  ›  tardate

处理Ant-BPELC任务中的PermGen错误

  •  2
  • tardate  · 技术社区  · 16 年前

    我在用JDK1.5.0.0在Linux下用Ant编译项目时遇到了java.lang.outofmemoryError:PermGen错误。同一个项目在Windows下编译没有问题。

    通常这与分配给JVM的maxpermsize有关。Irakli Nadareishvili有一个 best explanations of PermGen errors 以及设置指南 Java HotSpot VMOptions (例如-xx:maxpermsize=128m)

    在这种情况下,我很快把问题缩小到一个特定的问题 bpelc 蚂蚁任务

    <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 回复  |  直到 16 年前
        1
  •  2
  •   Joachim Sauer    16 年前

    bpelc 任务在运行Ant的原始JVM中执行,然后设置 ANT_OPTS (或类似的东西)是唯一可能的解决办法。

    一个类似的事情可能是将该任务重构为第二个Ant构建文件,并使用单独的JVM运行该文件。不是很好,但根据您的环境,可能更容易实现。