如何正确捆绑GWT与我的webapp?(是:为什么gwt-user-1.7.0包含Servlet API类)

Ant*_*n K 11 gwt

有没有人知道这种捆绑决定的理智?谷歌的工程师在大多数情况下都采取了明智的行动,所以这让我很惊讶.

这将导致与通过Maven依赖项提取的其他版本的servlet API发生冲突:

  • webapp classpath可能包含与GWT捆绑在一起的版本;
  • 容器可能会拒绝加载GWT jar,因为它包含javax.servlet包;
  • 在大多数情况下,这可能会偏离IDE的调试器和真正执行的VM的类路径.

链接到有问题的jar(正如你在解压缩后看到的那样,如果你不相信GWT在同一个jar中包含servlet API类):http: //repo1.maven.org/maven2/ COM /谷歌/ GWT/GWT用户/ 1.7.0/GWT-用户1.7.0.jar

Sri*_*nan 19

您不应该在war文件中包含gwt-dev.jar或gwt-user.jar.您在战争中只需要gwt-servlet.jar,并且只有在使用RPC时才需要.如果你注意到,gwt-servlet.jar(具有讽刺意味)不包含任何servlet类.

  • gwt-dev.jar包含编译器和链接器.您的代码永远不需要编译.
  • gwt-user.jar包含最终被转换为javascript的gwt框架.您只需在开发模式下使用它.
  • gwt-servlet.jar包含使用RPC框架时所需的服务器端代码.这是war文件中唯一应该出现的jar.

  • 简而言之:带有scope =的gwt-user和带有scope = runtime的gwt-servlet(IMO,你不应该在同一个Maven模块中编写客户端和服务器端代码,开头)另外,请注意你'如果您编写自己的生成器或链接器,则需要gwt-dev作为依赖项. (5认同)

Hil*_*amp 11

这些类在包中的原因是为仅在开发中使用gwt-user文件的用户提供完整的工作解决方案.没有它,GWT RPC将无法编译.这是GWT团队的一般观点,可以在关于GWT问题跟踪器的热烈讨论中找到:http://code.google.com/p/google-web-toolkit/issues/detail? id = 3851

但是,GWT 1.7还包含javax源文件,这可能会导致其他问题.例如对于maven,也可能对你提到的要点.这在GWT问题和GWT的更高版本中得到解决,javax源文件已从gwt-user jar文件中删除.

对于部署,您应该使用gwt-servlet jar,它不包含javax类或任何其他第三方库.在过去的几个中,可能会发生gwt-servlet jar文件中缺少用于服务器端的客户端使用的GWT文件.已经解决了这些问题的丢失,并且已将类添加到servlet jar文件中.如果仍然找到gwt-servlet中缺少的GWT类,则应提交问题报告.在您的情况下,假设您使用1.7,它可能意味着升级到更新版本的GWT.