使用特定模块进行调试的想法已经流传了一段时间,并且在
this Google I/O presentation
(参见PDF中的幻灯片33或视频中的0h31m)。
基本的想法是你有一个
标准
GWT模块,一秒钟
调试
继承此标准模块、配置某些属性并使用GWT的延迟绑定在调试时用特定实例替换某些类的模块。
然后,您只需要配置maven/ant构建,根据您处于开发模式还是发布模式来编译适当的模块。
在我的项目中,我没有创建“app.config”延迟绑定属性,但稍后我可能会这样做。我所做的是:
创建了标准模块
com/example/mainmodule.gwt.xml:
<module rename-to="mainModule">
<inherits name="com.smartgwt.SmartGwt" />
<define-property name="log_level" values="OFF,DEBUG" />
<inherits name="com.allen_sauer.gwt.log.gwt-log-common" />
<extend-property name="locale" values="en" />
<extend-property name="locale" values="fr_FR" />
</module>
创建了一个“调试”模块,它继承了标准模块,并为开发配置了一些附加属性。
com/example/mainmoduledebug.gwt.xml:
<module rename-to="mainModule">
<inherits name="com.example.MainModule" />
<set-property name="user.agent" value="gecko1_8" />
<set-property name="locale" value="fr_FR"/>
<set-property name="log_level" value="DEBUG" />
</module>
注:
重命名为
属性在这里非常重要,因为您希望两个模块以完全相同的名称部署。在开发期间编译时,您不希望更改所有HTML主机页以指向调试模块。
配置maven和gwt maven插件以编译正确的模块
<project>
(...)
<properties>
(...)
<gwt.module.suffix></gwt.module.suffix>
<gwt.compiler.force>true</gwt.compiler.force>
</properties>
(...)
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<configuration>
(...)
<module>com.example.MainModule${gwt.module.suffix}</module>
</configuration>
</plugin>
(...)
<profiles>
<profile>
<id>gwtDebug</id>
<properties>
<gwt.module.suffix>Debug</gwt.module.suffix>
<gwt.compiler.force>false</gwt.compiler.force>
</properties>
<activation>
<property>
<name>gwtDebug</name>
</property>
</activation>
</profile>
</profiles>
</project>
只需执行“maven clean install”就可以编译生产模块。在开发中,您使用“mvn clean install-dgwtdebug”来激活gwtdebug配置文件,该配置文件反过来编译调试模块。
当然,可以将~/.m2/settings.xml配置为始终定义“gwtdebug”属性…
同样的想法也适用于蚂蚁。但我对它不太熟悉。
当你开始玩弄用调试模块覆盖真实模块的想法时,你开始设想一些非常酷的可能性:
-
您可以添加性能日志,这些日志将在生产时从代码中删除。
-
可以将所有toString()方法配置为在调试模式下返回有用的内容,在生产模式下返回空字符串(从而减小.js的大小)。
-
您可以通过只指定一个区域设置/一个浏览器/一个日志级别来减少排列数,以加快编译速度(但不要忘记不时测试其他区域设置/浏览器)。