7

我正在使用 GWT 2.4 并且已经编写了大量代码。我知道 GWT 插件附带的 Jetty 服务器对可以在项目中使用的 jar 进行非常严格的控制,以尽可能接近地模仿应用程序引擎。我需要部署到 tomcat 7。我在 eclipse 中修改了我的项目并将其“祝福”为动态 Web 项目,因此我可以导出...WAR 并将其上传到我的 QA 和生产 tomcat。

我需要帮助让应用程序在嵌入式 tomcat 上运行(和调试)(就像一个诚实的动态 Web 项目一样)。我已经在 eclipse 中设置了 tomcat,并且我已经部署了我的 CAS 服务器 Web 应用程序。

我在这里和其他地方准备了大量旧的或令人困惑的帖子。基本上,我正在寻找与打包的 Jetty 服务器相同的调试环境,但是在我自己的 eclipse 中配置了 WTP 的 tomcat 上......所以我可以模仿我的生产环境(就像 Jetty 模仿应用程序引擎一样)

任何帮助表示赞赏。

4

2 回答 2

7

它可能应该更容易一些,但它是可能的。这是我的做法:

1. 设置网络服务器

  • 使用 Eclipse 的JavaEE版本,我设置了 Tomcat 7.0 服务器适配器,并在Preferences > Server > Runtime Environments
  • File > New > Project... > Web/Dynamic Web Project
    • 选择我第一步设置的目标运行时
    • 重要:在上下文根中,输入/
  • 我创建了一个 HTML 文件和一个 Servlet,然后尝试使用Debug As > Debug On Server

2.添加GWT代码服务器

  • Project > Properties > Google > Web Toolkit > Use Google Web Toolkit
  • 重要提示:我总是需要更改 Java 构建路径 ( Project > Properties > Java Build Path > Order and Export) 中的顺序,请参阅http://code.google.com/p/google-web-toolkit/issues/detail?id=4479 - gwt-dev.jar 必须几乎处于领先地位。
  • Project > Properties > Google > Web Application: War directory = "WebContent", 还要勾选 "Launch and deploy from this directory"
  • 我创建了一些示例 GWT 内容(我创建了一个示例 GWT 项目,并将其中的大部分内容复制过来)
  • 我尝试用 GWT 编译项目。这告诉我,如果我得到正确的构建路径顺序 - 否则,编译器会因“java.lang.NoSuchFieldError:warningThreshold”而提前失败。
  • Debug As > Web Application- 只是为了创建一个调试配置。停止调试。编辑调试配置 ( Run > Debug Configurations...),取消选择“运行内置服务器”。再次开始调试。

现在,终于,我可以调试服务器和客户端部分(我仍然需要单击两个调试图标来启动两者!)我可以从“开发模式”视图管理客户端,从“服务器”视图管理服务器端“ 看法。归根结底,它运行良好,并且使用“资源更改时自动发布”功能 ( Servers view > myServerName > Open > Publishing),有时甚至比使用集成的 Jetty 更好。

于 2012-07-28T11:37:12.470 回答
1

乍一看,我真的不明白你为什么会遇到问题。也许,Eclipse 的布局方式过于混乱和令人生畏。

在我的 Eclipse 上,我在 GWT 调试期间一直使用默认码头作为服务器。但是,当部署在 Tomcat 或 JBoss 上时,有些问题不会被 jetty 捕获。

当我将 Tomcat 或 JBoss 实例添加到 Eclipse 并将我的应用程序添加到这些服务器实例时,调试立即工作。您是否错过了一项重要但简单的信息?

让我假设以下内容将填补您缺少的链接...

  1. 定位/添加您的服务器实例:

    在 Eclipse 中的 Package Explorer(或 Project Explorer,其中之一)上,除了您的个人项目之外,您还会看到一个“服务器”项目。在它下面是列出所有 Tomcat 实例的配置节点。

    如果您在包资源管理器中看不到“服务器”节点,可能是由于您的工作集过滤器。(如果你不知道什么是工作集......我想你需要加强你在 Eclipse 中的灵巧性)。

    如果您还没有 Tomcat 实例,只需右键单击“服务器”项目以添加新服务器(Package Explorer -> New -> Server ...)。系统会询问您 Tomcat 家的位置。以及您想要的服务器实例端口号。当然,您必须确保端口号不会与您机器上任何其他 inet 操作使用的端口冲突。

  2. 第二次配置端口号

    在 Package Explorer 中的服务器实例节点上,您会找到应该编辑的文件,以设置端口号以匹配您在创建新 Tomcat 实例时指定的端口号。如果您不知道要编辑哪个文件,则需要阅读您创建的 Tomcat 版本以找出哪个文件包含端口号配置。

    您需要第二次配置端口,因为第一次告诉 Eclipse 期望服务器实例运行的位置和端口。第二次是配置服务器实例本身。

  3. 将您的应用程序添加到服务器

    但是,“服务器”项目中的节点只允许您配置 Tomcat 实例。还有另一个称为“服务器视图”的视图来进一步配置您的 tomcat 实例。您需要从 Window->Show View->Server->Servers 启用服务器视图。

    右键单击“服务器视图”中的服务器实例以添加您的应用程序。

  4. 在 Maven 生成的目标上运行调试。

    有时您希望调试战争结构以找出战争中缺少哪些罐子。并逐渐从你的战争中删除罐子,以找出服务器已经提供的罐子。由于 JBoss 已经提供了许多 jar,因此您必须确定您的开发 jar 是否与 JBoss 期望的版本相同。

    您将在您的工作区中创建另一个 Eclipse 项目,并在您的第二个项目中创建一个 Eclipse 文件夹软链接,以指向您的第一个项目的 Maven 生成目标。您将 target/{maven generated webapp directory} 指定为第二个项目的 webapp 目录。我所说的“maven 生成的 webapp 目录”是指 Maven 生成的解压缩中间目录(Maven 使用它来生成压缩的 war 文件)。

    如果您可以在 Eclipse 开发盒上忠实地复制生产 tomcat/jboss 服务器,那么这是调试生产战争的最干净的方法。

  5. 如果你更喜欢 JBoss。

    不知何故,JBoss 配置节点未列在 Package/Project Explorers 的“服务器”节点中。您需要转到您的 JBoss 安装目录来编辑它们。

  6. 远程调试。

    如果你想在你的生产机器上调试应用程序,或者在另一个机器上的服务器上调试,你必须在调试下启动那个 tomcat 实例。你应该读一读。您必须指定调试端口。

    然后在 Eclipse 中,在 Run->Debug Configuration->Remote Java Application 中指定应用程序和调试端口。

    第一次调试时,Eclipse “可能不知道”源文件在哪里,尤其是当您的应用程序具有多个项目依赖项时。(为什么 Eclipse 不能从我的项目列表中搜索源文件?)无论如何,您必须指定在哪里可以找到您的源文件。然后,当您的调试遍历到另一个项目依赖项时,您将不得不覆盖源文件的位置。

所以,瞧!这就是我进行调试的方式。我建议您尽可能避免远程调试,除非您需要诊断生产问题。除非您正在进行远程调试,否则不要尝试将战争部署到本地服务器,而只需将项目与服务器实例相关联即可。

Eclipse 太混乱了

我知道 Eclipse 太混乱了,你必须深入了解它的特性。你只需要忍受它。Eclipse 菜单和视图显然针对以插件程序员为中心而非以用户为中心进行了优化。

例如,我为什么要去“帮助”安装新软件?我曾经期望“帮助->安装新软件”是安装新软件的指导手册。

Eclipse 团队没有将这些操作组合在一起,以便我可以在 Package Explorer 中将应用程序添加到服务器实例,这让我很生气(也让我很恼火)。为什么不?作为用户,我希望只看到一个配置服务器的入口点。

为了减轻困惑,我喜欢鼓励人们下载并安装 Springsource 的 Eclipse (STS) 版本。它与 Eclipse 相同,只是 STS 安装了基本部件,并且有一个指向可兼容安装插件的仪表板。Tomcat 预装为 VMware tc Server。并且视图已正确配置以显示服务器实例。并且预装了正确的可使用的 Eclipse-Maven 桥接插件。

于 2012-07-29T17:05:58.667 回答