java - 从命令行 : StackOverFlow 在 Eclipse 中编译但不使用 Javac

标签 java eclipse ant stack-overflow javac

我有一个 Java 项目,其中包含许多非常大的源文件,它在 Eclipse 中编译得很好,但是它无法通过命令行或 Ant 中的 javac 进行编译。

当我尝试使用 javac(或使用 Ant)从命令编译它时,我得到一个 StackOverflow 异常:

   [javac] java.lang.StackOverflowError
   [javac]  at com.sun.tools.javac.jvm.Gen.genCond(Gen.java:786)
   [javac]  at com.sun.tools.javac.jvm.Gen.genCond(Gen.java:739)
   [javac]  at com.sun.tools.javac.jvm.Gen.visitBinary(Gen.java:1841)
   [javac]  at com.sun.tools.javac.tree.Tree$Binary.accept(Tree.java:926)
   [javac]  at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:806)
   [javac]  at com.sun.tools.javac.jvm.Gen.genCond(Gen.java:786)
   ...
   ...
   ...

我曾尝试在命令行和 Ant javac 任务中将一些参数传递给 JVM,例如 -Xss、-Xmx、-Xoss 等,但我总是遇到相同的错误。

据我所知,Eclipse IDE 的编译器似乎与 Sun JDK 不同。有没有办法让 JDK 以类似于 Eclipse 的方式进行编译?

谢谢, 史蒂夫


这很奇怪,但我发现我可以用 JDK 1.6 编译代码。

这并没有解决我的问题,因为该代码被另一个项目用作库,并且它提示并编译版本号,因为 JDK 1.5 是目前的项目标准(并将持续几个月)。

有谁知道 1.6 中发生了什么变化,是否可以通过标记将这些更改应用到 1.5?

最佳答案

当您从命令行运行“javac”命令时,需要使用“-J”选项指定 JVM 参数。例如; -J-Xms48m 设置初始堆大小。

这记录在 javac(1) manual page 中.

如果您收到 StackOverflowError,您应该调整的选项是线程堆栈大小;例如-J-Xss5m.

This is odd, but I have found that I can compile the code with JDK 1.6.

我希望解释是以下之一:

  • 您遇到的 javac 错误已在 JDK 1.6 或 JDK 1.5 的更新补丁版本中修复
  • JDK 1.6 中的 javac 不那么依赖堆栈,或者
  • 增加了 javac 的默认堆栈大小。

一个可能的错误是 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6273455

编辑

... and is it possible to apply those changes to 1.5 by flags?

假设您指的是启用编译器错误修复的标志,答案很可能是否定的。确实,如果是上述错误,那么升级到最新的 JDK 1.5 补丁版本似乎也无济于事。但是,有两种可能的解决方案:

  1. 上面的错误报告提供了一种可能的解决方法,需要更改触发错误的源代码。但首先您需要确认这是导致问题的错误,并确定有问题的源代码文件。

  2. 可以使用带有标志 -source 1.5 -target 1.5 的 Sun JDK 1.6 编译器编译您的生产代码。

关于java - 从命令行 : StackOverFlow 在 Eclipse 中编译但不使用 Javac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108523/

相关文章:

java - 用鼠标移动图像Java

java - JIT 编译的缺点是什么?

java - Maven 和包

java - 在适配器内打开一个对话框返回空值

Java(处理1.5.1): Fluent interface @ multilevel inheritance via generics

android - Eclipse Android 项目已创建且始终缺少 R 元素

eclipse - 是否可以将 Eclipse IDE 用作文本编辑器?

ant - 如何在输出 .tar.gz 文件中创建符号链接(symbolic link)?

java - 用ant编译时出现异常

python - 你将如何在 python 中实现 ant-style patternsets 来选择文件组?