【问题标题】:How to debug a GWT application running on OSGi?如何调试在 OSGi 上运行的 GWT 应用程序?
【发布时间】:2011-03-04 21:24:46
【问题描述】:

我正在使用 GWT 开发 Web UI。虽然只使用可以使用 Firefox 扩展从 Eclipse 调试的小部件,但现在我正在将 UI 与其他 OSGi 捆绑包集成,我无法使用此解决方案。

为了部署 GWT 应用程序,我创建了 .war 并使用 BND 将其转换为 OSGi 包。然后我使用 Pax Runner 和 Pax Web 启动带有所有捆绑包的 OSGi 容器,并且应用程序正常工作,但是当生成的 javascript 代码出现故障时,我没有任何像样的输出错误或调试工具。

有什么方法可以从 OSGi 以“调试模式”启动 GWT 应用程序?

在这种情况下还有什么其他想法可以提供帮助吗?

更新:是否可以从Activator 使用浏览器连接器实例化com.google.gwt.dev.DevMode 或其部分?

【问题讨论】:

    标签: eclipse debugging gwt osgi pax-runner


    【解决方案1】:

    我终于设法使用 OSGi、GWT 和可选的 eclipse 启动开发模式。解决方案是在 GWT 开发模式的-noserver 标志上,它不知道应用程序运行时代码的变化,但它可以用于调试已编译的代码并接收异常跟踪。

    我也设法在没有 eclipse 的情况下运行开发 shell,但是如果您对这个解决方案不感兴趣,可以直接跳转到 eclipse 集成部分。

    没有 Eclipse(只有异常,没有调试)

    您需要了解以下信息:

    • 你的来源在哪里 ($SRC)
    • 你的 GWT 库在哪里 ($GWT_PATH),特别是 gwt-user.jargwt-dev.jar
    • (可选)HTTP OSGi 服务器为应用程序提供服务的端口 ($PORT)。
    • 应用程序的启动 URL ($URL)
    • 包含应用程序的 .gwt.xml 文件的包 ($PACKAGE)。

    然后你需要运行:

    java -cp $SRC:$GWT_PATH/gwt-user.jar:$GWT_PATH/gwt-dev.jar \
        com.google.gwt.dev.DevMode -noserver -port $PORT \
        -startupUrl $URL $PACKAGE
    

    例如:

    java -cp src/:lib/gwt-2.0.3/gwt-user.jar:lib/gwt-2.0.3/gwt-dev.jar \
        com.google.gwt.dev.DevMode -noserver -port 8080 \
        -startupUrl httplocalgui.html es.warp.samples.httplocalgui
    

    最后,您只需要像往常一样部署您的应用程序,在我的示例中,我使用 pax-runner 和 pax-web 进行部署,使用默认端口 8080。

    使用 Eclipse

    1. 打开项目的调试配置
    2. 转到“服务器”选项卡并取消选中“运行内置服务器”
    3. 转到“属性”选项卡并添加“-port 8080”(如果 8080 是您的 Web 容器使用的端口)。我认为没有内置服务器的这个参数只用于创建开发模式生成调用浏览器的url(或者elipse用来生成可以复制粘贴到浏览器地址栏中的url)。李>
    4. 部署您的应用程序。
    5. 从安装了 GWT 扩展的浏览器访问它(不要忘记添加 ?gwt.codesvr=127.0.0.1:9997

    【讨论】:

    • 很好,完美运行:)。解决方案并不像一开始看起来那么复杂。但是,我在 Eclipse 中设置 -port 8080 选项时遇到问题。当我设置它时,它仅在第一个调试会话中使用一次。当我再次运行调试时,此选项被删除,GWT 调试开始使用默认的8888 端口(所有其他设置都不会被删除)。这似乎是 GWT Eclipse 插件问题。你也有这个问题吗?
    • 是的,这比我想象的要容易。我开始尝试从 Activator 实例化 DevMode,但它一团糟。还有关于端口的问题,我第一次修改参数的时候就出现了,第二次之后我以为它已经修复了,但是今天又消失了:S无论如何我认为在-noserver中运行时这个参数不是很重要模式。
    【解决方案2】:

    我最近遇到了同样的问题,不幸的是我没有找到任何好的解决方案。

    最终,我创建了我在客户端代码中使用的所有 GWT 服务的模拟实现。当我需要调试客户端代码时,我只是切换到这些服务,而不是在下面使用 OSGi 的真实服务。然后在 Eclipse 中,我可以在调试模式下运行 GWT 应用程序。这远非完美,需要一些模拟工作,但它对我有用(至少现在)。

    【讨论】:

    • 那么坏消息 :(,这正是我开始做的事情,但我希望找到更好的解决方案......
    猜你喜欢
    • 2012-05-14
    • 2013-05-14
    • 2018-02-26
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2011-02-03
    • 2016-09-18
    • 2021-10-05
    相关资源
    最近更新 更多