Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在每次GWT编译时都会得到新的javascript,而无需更改java源代码_Gwt - Fatal编程技术网

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

我在每次GWT编译时都会得到新的javascript,而无需更改java源代码,gwt,Gwt,GWT将Java源代码编译成Javascript,并根据文件内容的散列来命名文件。每次编译我都会得到一组新的文件,因为javascript内容在变化,即使我根本不改变源代码 对于OBF和PRETTY输出,文件是不同的,但是如果我将其设置为DETAILED,它们在每次编译时就不再不同了。在PRETTY中,我可以看到编译之间的所有/大部分差异都在typeId的值参数中。例如,调用名为initValues()的函数时,其typeId参数的值不同。据我所知,GWT将在每次编译时编译一个新版本,这是一个特

GWT将Java源代码编译成Javascript,并根据文件内容的散列来命名文件。每次编译我都会得到一组新的文件,因为javascript内容在变化,即使我根本不改变源代码


对于OBF和PRETTY输出,文件是不同的,但是如果我将其设置为DETAILED,它们在每次编译时就不再不同了。在PRETTY中,我可以看到编译之间的所有/大部分差异都在typeId的值参数中。例如,调用名为initValues()的函数时,其typeId参数的值不同。

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

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


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

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


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

我的第一个猜测可能是文件中某个地方的日期,但您会看到详细信息:/Yea,我希望它是构建日期的时间戳或其他什么,但看起来不是这样。我的问题不是它每次都在编译,而是对于相同的源每次编译器输出都不同。这直接违背了GWT的工作方式,并删除了名为cache.html和cache.js的强散列文件的全部要点。顺便说一句,我们已经在使用Maven,这是Maven发布过程和我们使用GCJ进行的编译之间的交互导致了这个问题。我已经有了一个解决方案,但我想知道为什么GWT会这样做。所以GWT只是不使用确定性方法将类转换为TypeID?这在我所看到的差异中是有意义的(因为函数名是相同的,所以PRETTY和OBF中的typeid都是相同的),但令人惊讶的是它们不会使用一致的方法。