【问题标题】:Maven compilation: Failure executing javacMaven编译:执行javac失败
【发布时间】:2011-01-24 13:25:14
【问题描述】:

这是我们在使用 Maven 2.2.1 和 JDK 1.6.0_23 尝试在 Windows Server 2003 下编译新签出的代码时遇到的异常。几台运行 Ubuntu 且 Maven 和 JDK 版本相同的机器在编译完全相同的源代码时完全没有问题。

已尝试提供其他 Maven 选项(即 MAVEN_OPTS=-Xms256m -Xmx1024m)但无济于事。

此问题的原因可能是什么?可能的解决方案是什么?谢谢。

[INFO] Compilation failure

Failure executing javac, but could not parse the error:


The system is out of resources.
Consult the following stack trace for details.
java.lang.StackOverflowError
    at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:1799)
    at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1522)
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
    at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:377)
    at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1241)
    at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1210)
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
   ... then trace repeats multiple times

【问题讨论】:

  • MAVEN_OPTS=-Xms256m -Xmx1024m 会增加堆内存

标签: java maven-2 stack-overflow


【解决方案1】:

试试

MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k

注意:-Xss ,应根据可用的硬件设置

【讨论】:

  • 接受这个,因为它是第一个有效的答案。 @dogbane 的答案可能更灵活,因为它与项目相关而不是系统相关(MAVEN_OPTS 是一个环境变量)。
  • +1,因为这帮助我弄清楚我认为是stackoverflow.com/questions/9229020/… 的解决方案(或者至少是我的问题,如我在那边的回答中详述的那样)
【解决方案2】:

您的任何代码是否是自动生成的,例如来自 WSDL?你能查明是哪个类导致了问题吗?这样做的一种方法是删除一些源代码,重新编译并重复,直到缩小到一小部分类。

您有任何大型类或长方法吗?如果是这样,你应该重构。

增加堆栈大小。我认为默认值是 512k。将编译器配置更改为:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>
  <configuration>
    <compilerArgument>-J -Xss10M</compilerArgument>
  </configuration>
</plugin>

【讨论】:

  • +1 compilerArgument 对我不起作用(由于某种原因,javac 参数无效)。但是 compilerArguments (复数)确实如此。附带说明一下,maven 文档 (maven.apache.org/plugins/maven-compiler-plugin/…) 指出,必须将 fork 设置为 true 才能使用 compilerArgument 和 compilerArguments。
  • 大多数recent documentation 表示&lt;compilerArguments&gt; 现在已弃用,您应该改用&lt;compilerArgs&gt;。
  • 在 maven 3.5.x 中应该这样设置: org.apache.maven.pluginsmaven-compiler-plugin3.5.1 true-J-Xss4m
【解决方案3】:

此问题的原因可能是什么?可能的解决方案是什么?谢谢。

以下是一些可能的原因:

  • 堆栈实际上太小了。修复 - 设置更大的堆栈大小。
  • 您正在编译一个病态的类或方法。修复 - 尝试识别文件、识别病理并重构它。
  • 您遇到了 java 编译器错误。修复 - 尝试识别文件,识别触发错误的原因,并重构它以解决错误。
  • 您以某种方式设法将损坏的 JAR 文件放入 Windows 计算机上的 Maven 本地存储库中。修复 - 擦除存储库并重建。 (这可能需要重新下载一堆工件和插件。)

【讨论】:

    【解决方案4】:

    下面的评论是一个有效的答案

    set MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k -XX:MaxPermSize=384m"
    

    【讨论】:

      【解决方案5】:

      我也遇到了同样的问题。 为了解决它我所做的,是- 我在控制台中运行了以下命令

      set MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k *-XX:MaxPermSize=384m
      

      而不是-

      set MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k *-XX:MaxPermSize=128m
      

      试试这个,它肯定会工作。如果仍然遇到同样的问题,请更换

      -XX:MaxPermSize=384m
      

      到

      -XX:MaxPermSize=512m
      

      【讨论】:

      • 迁移到 Java 8,不再使用 permgen。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多