2011-01-24 155 views
10

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

已尝试提供替代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 
+0

`MAVEN_OPTS = -Xms256m -Xmx1024m`将增加堆内存 – 2011-01-24 13:28:10

回答

12

尝试

MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k

注:-Xss,应根据现有

+0

接受这是因为这是第一个有效的答案。 @dogbane的答案可能更灵活,因为它与项目相关而不是系统相关(MAVEN_OPTS是一个环境变量)。 – 01es 2011-01-24 16:59:02

+1

+1,因为这帮助我弄清楚了我认为的解决方案http://stackoverflow.com/questions/9229020/jenkins-not-showing-maven-compiler-errors/10857174#10857174(或者至少是我的问题,如我在那里的回答详述) – haylem 2012-06-01 21:26:14

7

硬件设置是您的任何代码被自动生成如从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> 
+3

+1 compilerArgument不适用于我(由于某种原因无效的javac参数)。然而编译器参数(复数)做了。另外,maven文档(http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArguments)指出fork必须设置为true,以便编译器参数和编译器参数使用。 – 01es 2011-01-24 14:39:42

2

可能是这个问题的原因是什么,什么会是一个可能的解决方案?感谢名单。

下面是一些可能的原因:

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

我也遇到过同样的问题。 要修复它我做什么,是 - 我在控制台运行下面的命令

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

代替OF-

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

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

-XX:MaxPermSize=384m 

-XX:MaxPermSize=512m 
0

下面的评论是一个工作的答案

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