2011-01-24 154 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"