我有一个大型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
我尝试用
执行mavenmvn -Dgwt.extraJvmArgs=-Xmx2048M gwt:run-codeserver
我也尝试过使用Oracle JDK和Fedora提供的开源JDK。
没有任何区别。我在这里做错了什么?
更新
我可以确认这是Maven插件的问题,而不是代码。使用IntelliJ内置的Super Dev Mode支持运行项目允许我编译并重新编译应用程序。所以这归结为知道增加Maven插件可访问的内存的正确方法。这显然不是我上面试过的方法之一......
答案 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>