今天用ant編譯項目出現 [javac] 系統資源不足。的錯誤,如下
Buildfile: build.xml
-compile:
[javac] Compiling 919 source files to E:/DSHR/dshr/WebContent/WEB-INF/classes
[javac]
[javac]
[javac] 系統資源不足。
[javac] 有關詳細信息,請參閱以下堆棧追蹤。
[javac] java.lang.OutOfMemoryError: Java heap space
看來是內存不足,給設置大一點
<target name="-compile">
< javac srcdir="${srcdir}" destdir="${builddir}" memorymaximumsize="500M" includes="**/*.java" classpathref="class_path">
<compilerarg value="-Xlint:unchecked"/>
</javac>
</target>
在編譯出現下面的錯誤
Buildfile: build.xml
-compile:
[javac] Compiling 919 source files to E:/DSHR/dshr/WebContent/WEB-INF/classes
[javac] Since fork is false, ignoring memoryMaximumSize setting.
[javac]
[javac]
[javac] 系統資源不足。
[javac] 有關詳細信息,請參閱以下堆棧追蹤。
[javac] java.lang.OutOfMemoryError: Java heap space
Since fork is false, ignoring memoryMaximumSize setting.這句話應該是因為fork是false所以我設置的memoryMaxmumSize就被忽略了,繼續修改
<target name="-compile">
< javac srcdir="${srcdir}" destdir="${builddir}" fork="true" memorymaximumsize="500M" includes="**/*.java" classpathref="class_path">
<compilerarg value="-Xlint:unchecked"/>
</javac>
</target>
再用ant編譯,通過了。
說明:在Ant的文檔中(默認為%ANT_HOME%/docs/manual/index.html)可以查看Ant Tasks 里面列出了不少任務其中javac在Compile Tasks中
點擊javac可以查看更多的參數信息
========================================================================================
在Ant中使用javac命令,拋出的java.lang.OutOfMemoryError錯誤和一般java應用拋出這個錯誤沒兩樣。當執行JDK的javac命令,都是調用%JAVA_HOME%\lib\tools.jar包中com.sun.tools.javac.main.Main類。 一般出現這個問題都是虛擬機分配的內存不夠用。針對Ant,我調查了一番可以通過以下兩種方法解決: 1)在javac節點處設置fork屬性,同時指定memoryinitialsize、memorymaximumsize屬性。例: Xml代碼 <javac fork="true" srcdir="${basedir}/src" destdir="${basedir}/build/classes" classpath="${project.classpath}" memoryinitialsize="256m" memorymaximumsize="256m"></javac> 說明: -fork:沒有指定fork屬性(默認為false),javac命令將和ant在同一個進程中執行,同時javac被分配的內存只有64MB,如果指定fork屬性為true,javac命令將和ant不在同一個進程中執行,分配內存的大小將為memoryinitialsize、memorymaximumsize指定的大小。 -memoryinitialsize:javac占用的最小內存。 -memorymaximumsize:javac占用的最大內存。 2) 第二種方法不用修改build.xml文件,通過在Ant執行時,指定虛擬機的內存來解決,不過這樣ant和javac還將在同一個進程中執行,具體方法在[ANT_HOME]\bin\ant.bat文件中增加set ANT_OPTS="-Xms256m -Xmx256m" 。 如果上面兩種方法都不能解決,那就只能是物理內存太小,那只能有兩種方法解決這個問題,其一就是最簡單的方法擴大內存,其二將工程的源文件分包編譯,不過這樣很麻煩,但也不乏是一種解決方法。