Maven编译:执行javac失败

Maven编译:执行javac失败,java,maven-2,stack-overflow,Java,Maven 2,Stack Overflow,在使用Maven 2.2.1和JDK 1.6.023在Windows Server 2003下编译新签出的代码时,我们遇到了一个例外。一些运行Ubuntu的机器使用相同的Maven和JDK版本,在编译完全相同的源代码时没有任何问题 已尝试提供替代Maven选项(即Maven_OPTS=-Xms256m-Xmx1024m)但没有效果 这个问题的原因是什么?可能的解决方案是什么?塔克斯 [INFO] Compilation failure Failure executing javac, but

在使用Maven 2.2.1和JDK 1.6.023在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-Xss1024k


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

您的任何代码是否自动生成(例如从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>

org.apache.maven.plugins
maven编译器插件
2.3.2
-J-Xss10M
这个问题的原因是什么?可能的解决方案是什么?塔克斯

[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
以下是一些可能的原因:

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

    • 我也遇到了同样的问题。 我所做的就是修复它- 我在控制台中运行了下面的命令

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

      set MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k *-XX:MaxPermSize=128m
      
      试试这个,肯定有用。如果仍然出现相同的问题,请更换

      -XX:MaxPermSize=384m
      


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

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

      MAVEN_OPTS=-Xms256m-Xmx1024m
      将增加堆内存+1编译器参数对我不起作用(由于某些原因,javac参数无效)。然而,编译器争论(复数形式)确实如此。作为旁注,maven文档()声明必须将fork设置为true才能使用compilerArguments和compilerArguments。most表示,
      现在已被弃用,您应该改用
      。在maven 3.5.x中,应将其设置为:org.apache.maven.plugins maven compiler plugin3.5.1正确-J-Xss4m接受这一点,因为这是第一个有效的答案。@dogbane的答案可能更灵活,因为它与项目相关,而不是与系统相关(MAVEN_OPTS是一个环境变量)。+1,因为这帮助我找到了我假设的解决方案(或者至少是我的问题,在我的答案中有详细说明)移动到不再使用permgen的Java 8。