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

如何将GWT与我的webapp正确绑定?(was:为什么gwt-user-1.7.0包含Servlet API类),gwt,Gwt,有人知道这种捆绑决定的合理原因吗?谷歌的工程师在大多数情况下都是明智的,所以这让我有点吃惊 这将导致与通过Maven依赖项拉取的其他版本的servlet API发生冲突: webapp类路径可能包含 与GWT捆绑的版本 集装箱可能拒绝装载GWT jar,因为它包含javax.servlet 包装 在大多数情况下,这将 可能会在您的应用程序中偏离类路径 IDE的调试器和 执行虚拟机 链接到讨论中的jar(如果您不相信GWT在同一个jar中包含servlet API类,那么解压后您将看到与我相同

有人知道这种捆绑决定的合理原因吗?谷歌的工程师在大多数情况下都是明智的,所以这让我有点吃惊

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

  • webapp类路径可能包含 与GWT捆绑的版本
  • 集装箱可能拒绝装载GWT jar,因为它包含javax.servlet 包装
  • 在大多数情况下,这将 可能会在您的应用程序中偏离类路径 IDE的调试器和 执行虚拟机
链接到讨论中的jar(如果您不相信GWT在同一个jar中包含servlet API类,那么解压后您将看到与我相同的内容):
您不应该在war文件中包含gwt-dev.jar或gwt-user.jar。您只需要在war中使用gwt-servlet.jar,并且只有在使用RPC时才需要。如果您注意到,gwt-servlet.jar(讽刺的是)不包含任何servlet类

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

这些类出现在软件包中的原因是为开发中只使用gwt用户文件的用户提供完整的工作解决方案。没有它,GWT RPC就无法编译。这是/曾经是GWT团队的总体观点,可以在GWT问题追踪器的生动讨论中找到:

但是,GWT1.7还包含javax源文件,这可能会导致其他问题。例如maven,可能还有你提到的要点。这在GWT问题中得到了解决,在GWT的更高版本中,javax源文件已从GWT用户jar文件中删除


对于部署,您应该使用GWTServlet jar,它不包含javax类或任何其他第三方库。在过去,GWT servlet jar文件中缺少为客户端使用而设计的、也用于服务器端的GWT文件。这些问题的缺失已经得到了解决,类被添加到servlet jar文件中。如果您仍然发现GWT servlet中缺少所需的GWT类,则应该提交一个问题报告。在您的情况下,假设您使用的是1.7,这可能意味着要升级到更新版本的GWT。

简而言之:提供了scope=provided的GWT用户和scope=runtime的GWT servlet(在我看来,首先,您不应该在同一个Maven模块中编写客户端和服务器端代码),请注意,如果您编写自己的生成器或链接器,您将需要gwt dev作为依赖项。好的,那么我应该将问题标题更改为“如何将gwt与我的webapp正确绑定”这一答案看起来与一般gwt开发过程更相关,因此我更喜欢它而不是赢家。无论如何,总得有人来处理“富人越来越富”的现象……:)