我在每次GWT编译时都会获得新的javascript,而不会更改java源代码

时间:2009-05-11 15:23:26

标签: gwt

GWT将Java源代码编译为Javascript,并根据其内容的哈希值命名文件。每次编译时我都会得到一组新文件,因为即使我根本没有更改源代码,javascript内容也会发生变化。

OBF和PRETTY输出的文件不同,但是如果我将它设置为DETAILED,则每次编译都不再相同。在PRETTY中,我可以看到编译之间的所有/大多数差异都在typeId的值参数中。例如,调用一个名为initValues()的函数,它的typeId参数值不同。

2 个答案:

答案 0 :(得分:2)

在PRETTY模式下,您看到的差异是将Java类分配给TypeIds。这是GWT管理运行时类型检查的方式。您会注意到每个脚本底部的表基本上将每个typeId映射到所有兼容的超类。这就是GWT仍然可以在JavaScript中抛出ClassCastException的方法(尽管你很少会遇到这种情况!)。

在OBF模式下,差异是由于缩小的函数名称的分配。

在这两种情况下,都是由于编译器处理代码的顺序。某些内部符号表可能正在使用非有序的集合存储符号进行处理。它可能由于很多原因而发生。

答案 1 :(得分:0)

据我所知,每次编译时GWT都会编译一个新版本,这是一个特性;)

您可以使用ant来控制它,这样它只会在应用程序实际更改时构建应用程序的GWT部分:

http://wiki.shiftyjelly.com/index.php/GWT#Use_The_Power_of_Ant_to_Build_Changes_Only