使用gwt:run-codeserver耗尽内存

时间:2013-01-15 03:37:49

标签: gwt maven maven-3

我有一个大型GWT应用程序,我想通过超级开发模式进行测试。

使用

运行应用时
mvn gwt:run-codeserver

它将编译好并提供服务器的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

我尝试用

执行maven
mvn -Dgwt.extraJvmArgs=-Xmx2048M gwt:run-codeserver

我也尝试过使用Oracle JDK和Fedora提供的开源JDK。

没有任何区别。我在这里做错了什么?

更新

我可以确认这是Maven插件的问题,而不是代码。使用IntelliJ内置的Super Dev Mode支持运行项目允许我编译并重新编译应用程序。所以这归结为知道增加Maven插件可访问的内存的正确方法。这显然不是我上面试过的方法之一......

1 个答案:

答案 0 :(得分: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>