代码之家  ›  专栏  ›  技术社区  ›  Steve Armstrong

在不改变Java源代码的情况下,编译每个GWT的新JavaScript

gwt
  •  3
  • Steve Armstrong  · 技术社区  · 15 年前

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

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   itsadok    15 年前

    在漂亮模式中,你看到的不同是Java类的分配给TypeIds。这就是GWT如何管理运行时类型检查。您会注意到在每个脚本底部有一个表,它基本上将每个typeid映射到所有兼容的超类。这就是GWT仍然可以在JavaScript中抛出ClassCastException的方式(尽管您应该很少遇到这种情况!).

    在obf模式下,差异是由于分配了小型函数名。

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

        2
  •  0
  •   rustyshelf    15 年前

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

    但是,您可以使用Ant来控制它,以便它只在应用程序的GWT部分实际发生更改时构建该部分:

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