繁体   English   中英

使用eclipse在tomcat上调试GWT

[英]debug GWT on tomcat using eclipse

我正在使用GWT 2.4并且已经编写了大量代码。 我理解GWT插件附带的Jetty服务器可以非常严格地控制可以在项目中使用的jar,以尽可能地模仿app引擎。 我需要部署到tomcat 7.我在eclipse中修改了我的项目并“祝福”它作为一个动态的Web项目,所以我可以导出... WAR并将其上传到我的QA和生产tomcat。

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

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

任何帮助表示赞赏。

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

1.设置Web服务器

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

2.添加GWT代码服务器

  • Project > Properties > Google > Web Toolkit > Use Google Web Toolkit
  • 重要提示:我总是需要更改Java Build Path中的顺序( 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 :战争目录=“WebContent”,同时选中“从此目录启动并部署”
  • 我创建了一些示例GWT内容(我创建了一个示例GWT项目,并将其大部分复制过来)
  • 我尝试GWT编译项目。 这告诉我,如果我的构建路径顺序正确 - 否则,编译器会在“java.lang.NoSuchFieldError:warningThreshold”中提前失败。
  • Debug As > Web Application - 只是为了创建调试配置。 停止调试。 编辑调试配置( Run > Debug Configurations... ),取消选择“运行内置服务器”。 再次开始调试。

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

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

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

当我将Tomcat或JBoss实例添加到Eclipse并将我的应用程序添加到这些服务器实例时,调试工作就会立即生效。 您是否遗漏了一条重要且简单的信息?

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

  1. 查找/添加服务器实例:

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

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

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

  2. 第二次配置端口号

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

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

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

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

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

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

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

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

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

  5. 如果您更喜欢JBoss。

    不知何故,JBoss配置节点未在Package / Project Explorers的“Servers”节点中列出。 您需要转到JBoss安装目录进行编辑。

  6. 远程调试。

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

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

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

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

Eclipse太混乱了

我知道Eclipse太混乱了,你不得不涉及它的功能。 你只需要忍受它。 Eclipse菜单和视图显然针对以插件编程者为中心而非以用户为中心进行了优化。

例如,为什么我会“帮助”安装新软件? 我曾经期望“帮助 - >安装新软件”成为安装新软件的教学手册。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM