2013-01-15 254 views
1

我有一個很大的GWT應用程序,我想通過超級開發模式進行測試。用gwt運行內存不足:運行代碼服務器

mvn gwt:run-codeserver 

運行的應用程序,將編譯OK,並提供服務器的URL。此時,我在Web瀏覽器中啓動我的應用程序,並嘗試再次使用bookmarklets進行編譯。這第二個編譯帶來了一系列類似的內存錯誤:

Caused by: java.lang.OutOfMemoryError: Java heap space  
... 
[ERROR] Out of memory; to increase the amount of memory, use the -Xmx flag at startup (java -Xmx128M ...) 

因此,這不是什麼祕密,我需要分配更多的內存來運行服務器的Java進程。我無法解決的是如何做到這一點。

我已經在我的pom.xml以下

<plugin>          
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
    <version>${gwt.maven.version}</version> 
    <configuration> 
     <extraJvmArgs>-Xmx2048M -Xms1024M -Xss1024k -XX:MaxPermSize=256M -XX:PermSize=128M</extraJvmArgs> 
    </configuration> 
</plugin> 

我MAVEN_OPTS環境變量設置爲

MAVEN_OPTS=-Xmx2048M 

我試圖執行行家與

mvn -Dgwt.extraJvmArgs=-Xmx2048M gwt:run-codeserver 

我有也使用Oracle JDK和Fedora提供的開源JDK進行了嘗試。

沒有什麼區別。我在這裏做錯了什麼?

UPDATE

我可以證實,這是與Maven插件的問題,而不是代碼。使用支持超級開發模式的IntelliJ來運行項目,可以讓我編譯和重新編譯應用程序。所以這可以歸結爲知道增加Maven插件訪問內存的正確方法。這顯然不是我上面試過的方法之一...

+0

這是一個很大的應用程序。即超過25個屏幕或至少10K行代碼? – SSR

+0

它使用Errai並綁定到許多JAX-RS接口,因此它最終成爲一個大型應用程序。 – Phyxx

+0

要排除編碼問題,請減小應用程序大小(放下屏幕數量)。從5開始繼續增加應用程序屏幕數量。如果它在特定的「數量」屏幕上打破。然後是「模塊化」應用程序開發環境的時間。 – SSR

回答

3

好的,所以這是我的錯。 POM.XML爲gwt插件提供了一些設置,這些插件是針對配置正確的內存配置文件的配置文件使用的,然後是另一組gwt插件設置與配置文件無關(我沒有注意到)。

所以當我編譯特定的配置文件(應用服務器)時,一切都很好。正在應用配置文件中定義的設置,並且所有操作都按照您的預期進行。但是當我在沒有任何配置文件設置的superdevmode中運行時,第二個不太具體的設置被用於超出我在命令行上設置的任何內容。

我最終使用-X maven標誌調試問題,該標誌轉儲了gwt插件實際使用的配置。如果任何人有同樣的問題,請查找下面的示例輸出。從這裏你可以知道最終應用了哪些設置,然後可以使用它來找出設置的位置。

[DEBUG] --- exit fork of org.jboss.pressgang.ccms:pressgang-ccms-ui:1.0-SNAPSHOT for org.codehaus.mojo:gwt-maven-plugin:2.5.1-rc1:run-codeserver (default-cli) --- 
[DEBUG] ----------------------------------------------------------------------- 
[DEBUG] Goal:   org.codehaus.mojo:gwt-maven-plugin:2.5.1-rc1:run-codeserver (default-cli) 
[DEBUG] Style:   Regular 
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <bindAddress>${gwt.bindAddress}</bindAddress> 
    <codeServerPort>${gwt.codeServerPort}</codeServerPort> 
    <extraJvmArgs default-value="-Xmx1024m">-Xmx1024m</extraJvmArgs> 
    <gen default-value="${project.build.directory}/.generated">${gwt.gen}</gen> 
    <genParam default-value="true">${gwt.genParam}</genParam> 
    <generateDirectory default-value="${project.build.directory}/generated-sources/gwt"/> 
    <gwtSdkFirstInClasspath default-value="false">${gwt.gwtSdkFirstInClasspath}</gwtSdkFirstInClasspath> 
    <inplace default-value="false">${gwt.inplace}</inplace> 
    <jvm>${gwt.jvm}</jvm> 
    <localRepository>${localRepository}</localRepository> 
    <logLevel default-value="INFO">INFO</logLevel> 
    <module>${gwt.module}</module> 
    <persistentunitcache>${gwt.persistentunitcache}</persistentunitcache> 
    <persistentunitcachedir>${gwt.persistentunitcachedir}</persistentunitcachedir> 
    <pluginArtifacts>${plugin.artifacts}</pluginArtifacts> 
    <project>${project}</project> 
    <remoteRepositories>${project.remoteArtifactRepositories}</remoteRepositories> 
    <style default-value="OBF">${gwt.style}</style> 
    <version>${plugin.version}</version> 
    <warSourceDirectory default-value="${basedir}/src/main/webapp"/> 
    <webappDirectory default-value="${project.build.directory}/${project.build.finalName}">${gwt.war}</webappDirectory> 
</configuration>