GWT真的将客户端代码编译成JavaScript和HTML吗?

GWT真的将客户端代码编译成JavaScript和HTML吗?,gwt,Gwt,我对使用GWT有严重的怀疑。GWT声称客户机代码被编译为JavaScript和HTML,但在编译代码之后,我仍然在项目中看到客户机代码的.class文件。当然,我在WEB-INF目录中有一些js和html文件,但是如果java客户端代码完全编译成js和html,为什么项目中会有.class文件?如果您知道什么是GWT,这是非常简单的。根据维基百科: GWT应用程序可以在两种模式下运行: 开发模式(以前的托管模式):应用程序作为Java虚拟机(JVM)中的Java字节码运行。这种模式 通常用于开

我对使用GWT有严重的怀疑。GWT声称客户机代码被编译为JavaScript和HTML,但在编译代码之后,我仍然在项目中看到客户机代码的.class文件。当然,我在WEB-INF目录中有一些js和html文件,但是如果java客户端代码完全编译成js和html,为什么项目中会有.class文件?

如果您知道什么是GWT,这是非常简单的。根据维基百科:

GWT应用程序可以在两种模式下运行:

  • 开发模式(以前的托管模式):应用程序作为Java虚拟机(JVM)中的Java字节码运行。这种模式 通常用于开发,支持代码的热交换 以及调试
  • 生产模式(以前称为Web模式):应用程序以纯JavaScript和HTML运行,从Java源代码编译。这种模式 通常用于部署

我想您已经理解了为什么您的项目中会出现Java字节码文件(.class)。检查:启动您的项目并打开gwt生成的网页,从客户端包中删除.class文件,它将无法工作。但在生产模式下,它工作正常,因为它不依赖于某些.class文件。例如,负责构建UI的类。

当您部署到GAE时,您将看到一个目录“WAR”。这是部署到服务器上的WAR,客户端代码使用纯JS+HTML代码。

如果应用程序对服务器进行RPC调用,则服务器的
代码仍然是编译的Java类文件。只有客户端代码被编译成javascript。这些.class文件是由于愚蠢的Eclipse毫无意义地编译掉了它可能看到的任何java文件。除非它们是RPC或RequestFactory类的服务器端,否则它们是无用的。唯一的例外是服务器类,或者两者都有帮助的类(因此服务器需要)。在这两种情况下,服务器JVM实际上加载了类,因此必须对它们进行编译。@ColinAlworth说它不依赖于某些.class,我指的是负责构建UI的类,例如
MyModuleEntryPoint
,因此没有这些类,编译的js和html就可以工作。是的,我只是想澄清一下,删除客户机包中的所有.class文件可能会导致一些破坏。像eclipse这样的IDE也会在build文件夹中创建类文件,以便验证代码。此外,生成器的编译版本需要位于GWT编译器的类路径中。我没有要求我的ant脚本指定哪些包包含生成器,而是将整个项目临时javac到GWT编译器的类路径中(考虑到GWT编译比javac长100倍,时间增加可以忽略不计)