debugging - 本地部署到 Intellij Tomcat 的 GWT 应用程序在支持 gwt 的客户端模块中看不到断点
问题描述
关于应用程序的一些事实:
- 它由几个模块组成,其中一个是 GWT 客户端模块
- 春天 3
- GWT 2.6.1(+ 兼容的 GXT)
- 打包为 .war,可以部署到独立的 Tomcat
- Chrome 插件不再工作,所以直到最近我不得不依靠 Eclipse + 嵌入式 Jetty + Firefox 24 才能在 DevMode 下启动应用程序并调试它
前几天我决定尝试在 IntelliJ IDEA 中启动它,看看调试是否可以在那里工作。
local Tomcat
通过IntelliJ 中的配置部署应用程序后的观察结果:
- 该应用程序部署得很好(使用
war
或exploded war
工件)。基本上,Intellijwork
从独立的 Tomcat 安装中获取目录并将其移动到其安装文件夹(例如 ..IntelliJIdea2019.1/system/Tomcat/Unnamed_MYAPP
)。配置文件也被复制到config
目录中。 - Tomcat的
webapps
目录保留在原始 Tomcat 安装中,并且应用程序部署在那里
起初我以为断点根本无法识别。然而,事实证明我只是在 GWT 客户端模块内测试中断;当我后来尝试其他一些模块时 - 执行按预期停止。
现在,有趣的是,当我使用 Jetty 进行开发和调试时,如果我对 GWT 客户端模块进行了更改,我可以简单地重新加载页面,它就会出现。
对于 Intellij 和 Tomcat,情况正好相反。断点不像提到的那样工作,但也令人耳目一新,例如。via Update classes
(而不是完全重新部署)不起作用,而对于其他模块则有效。
有没有办法以某种方式调整我的工件,以便也可以调试 GWT 模块?
我的exploded war
工件如下所示:
- <输出根>
- 元信息
- 清单文件
- 网络信息
- 班级
- GWT 模块编译输出
- 库
- web.xml
- 班级
- webapp 目录内容
- GWT 客户端模块 GWT 编译器输出
解决方案
实际上,这是一个愚蠢的情况——我希望执行停止在 gwt-aware 模块的 Java 代码中设置的断点处——但由于它已经被转译为 Javascript——这是不可能的。
在此类模块中停止断点的唯一方法是使用 DevMode。
推荐阅读
- actions-on-google - 我需要分配什么角色才能让某人能够在操作谷歌控制台中添加 alpha 和 beta 测试人员
- c# - 无法使用 google api 加载文件或程序集 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
- sql - 在 SQLite 上添加 ORDER BY 需要大量时间
- node.js - 使用 NodeJS 从 AWS Lambda 将图像上传到 s3 会导致文件损坏
- javascript - 如何在 Expressjs 和 Socket.io 上连接相同的端口
- python - 为清晰起见,在散点图中使用“bin”水平微调点
- sql - 使用 SQL 查询的前 5 条记录
- html - 如何循环导入多个 Factiva html 文件
- javascript - 如何在 docker compose 内的 Node.js 服务之间发送 json 消息
- python - 从指定索引数组的多维数组中提取元素的最快方法