2

我有一个大型 GWT 应用程序,我想通过 Super Dev Mode 进行测试。

运行应用程序时

mvn gwt:run-codeserver

它将编译好并提供服务器的 URL。此时我在网络浏览器中启动我的应用程序并尝试使用小书签再次编译它。第二次编译带来了一系列内存错误,例如:

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 插件也可以访问的内存的正确方法。这显然不是我上面尝试过的方法之一......

4

1 回答 1

3

好吧,这是我的错。POM.XML 有一些用于在针对配置文件进行编译时使用的 gwt 插件的设置,该配置文件已正确配置了内存设置,然后是另一组未绑定到配置文件的 gwt 插件设置(我没有注意到)。

因此,当我为特定配置文件(应用服务器)进行编译时,一切都很好。正在应用配置文件中定义的设置,并且一切都按您的预期工作。但是当我在没有设置任何配置文件的情况下以 superdevmode 运行时,第二个不太具体的设置被用于我在命令行上设置的任何内容之上。

我最终使用-Xmaven 标志调试了问题,它转储了 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>
于 2013-03-07T04:37:03.630 回答