atn 編譯java提示資源不足


今天用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" 。      如果上面兩種方法都不能解決,那就只能是物理內存太小,那只能有兩種方法解決這個問題,其一就是最簡單的方法擴大內存,其二將工程的源文件分包編譯,不過這樣很麻煩,但也不乏是一種解決方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM