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