扩展 ArrayList 或其他常见集合时 gwt 构建中出现奇怪的异常/错误

Strange exception / error in gwt build when I extend ArrayList or other common collections

我正在使用 Eclipse IDE 版本:Luna Service Release 1 (4.4.1)。 使用 GWT 2.7 和 Java 1.7.

我使用 GWT 提供的替换规则实现了一些自定义集合 class。

public class CustomArrayList<E> extends ArrayList{
 // ...... overridden methods here
}

ArrayList arraList=GWT.create(ArrayList.class);

每当我使用 GWT.create 创建 arraylist 实例时,它都会在 CustomArrayList class.

上使用我的实例
//gwt.xml file contains this configuration

    <replace-with
        class="xxxxxxxx.yyyyyyy.CustomArrayList">
        <when-type-is class="java.util.ArrayList" />
    </replace-with>

在客户端的 GWT maven 项目中,我按照上面提到的使用数组列表实例化,但是当项目编译在控制台上打印 AbstarctTreeLogger 相关消息时出现一些堆栈溢出错误。

customcollection.CustomArrayList<java.lang.Object>

[信息] [警告] 检查符合序列化条件的对象的所有子类型 [错误] 线程异常 "main" java.lang.WhosebugError [错误] 在 com.google.gwt.dev.util.log.AbstractTreeLogger.commitMyBranchEntryInMyParentLogger(AbstractTreeLogger.java:252) [错误] 在 com.google.gwt.dev.util.log.AbstractTreeLogger.commitMyBranchEntryInMyParentLogger(AbstractTreeLogger.java:252) [错误]

它重复产生此错误至少几千次,然后编译器崩溃。

失败后如果我再试一次,但不是每次都有效。

谁能帮我解决问题。

只是一个猜测,但由于 GWT 需要确保列表中可能包含的每个 class 都是可序列化的...通过创建自定义列表,您只需加倍编译器的工作,并且现在它达到了内存限制。

您可以通过增加编译器可用的内存来解决此问题,但最好的选择是更具体地使用您使用的类型。
参见 How can I keep GWT from trying to include every serializable class when I use ArrayList and gwt - Using List<Serializable> in a RPC call?

终于,更新的插件配置似乎可以解决各种内存需求问题 -

<!-- GWT Maven Plugin -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>2.7.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <!-- <goal>test</goal> -->
                    </goals>
                </execution>
            </executions>
            <!-- Plugin configuration. There are many available options, see gwt-maven-plugin
                documentation at codehaus.org -->
            <configuration>
                <runTarget>TrupublicBuilder.html</runTarget>

                <modules>
                    <module>com.trupublic.TrupublicBuilder</module>
                </modules>
                <extraJvmArgs>-XX:PermSize=1024m </extraJvmArgs>
                <extraJvmArgs>-XX:MaxPermSize=8192m</extraJvmArgs>
                <extraJvmArgs>-Xms512m </extraJvmArgs>
                <extraJvmArgs>-Xmx8192M </extraJvmArgs>
                <extraJvmArgs>-Xss2048k </extraJvmArgs>
            </configuration>
        </plugin>

我们缺少 -Xss 配置,Jens 在 Gwt 用户 google 组 here 中恰当地指出了这一点。