扩展 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 中恰当地指出了这一点。
我正在使用 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 中恰当地指出了这一点。