【问题标题】:How to start Equinox Application with startup arguments in Pax Exam?如何在 Pax 考试中使用启动参数启动 Equinox 应用程序?
【发布时间】:2014-11-18 14:05:08
【问题描述】:

我想在 Pax Exam 中测试我的 OSGI 应用程序,但是从我的插件之一启动应用程序时遇到了一些问题。

我使用 Equinox,并且有一些特定于 Equinox 的类扩展了 org.eclipse.equinox.app.IApplication。然后可以在 Eclipse Application Launcher 中选择此类,并且是要运行的第一个类(在我的情况下,它控制应用程序生命周期)。

当我运行 Pax Exam 测试时,所有包都已解析,但我的 IApplication 没有启动。

如何在 Pax Exam 中运行此类应用程序?

此外,我如何传递一些应用程序参数?我只看到一些 frameworkProperty (-F) 和 systemProperty (-D),但我需要一些常规的应用程序参数。

【问题讨论】:

    标签: eclipse-plugin osgi equinox pax-exam pax


    【解决方案1】:

    据我所知,IApplication 不是 equinox 的一部分,而是 eclipse 平台的一部分。所以我认为它在pax考试中没有直接支持。 Pax 考试只会启动 OSGi 框架并加载和启动您指定的包。

    因此,完成这项工作的方法可能是加载负责启动应用程序的 eclipse 包。我不确定这将如何详细工作。

    当使用 Eclipse 特定的东西时,您的应用程序的可移植性会降低。那么,也许您可​​以使用纯 OSGi 基础架构实现相同的目标?

    或者您要测试的应用程序是 Eclipse RCP 应用程序?在这种情况下,pax 考试可能不是最好的测试工具。在这种情况下,一些 UI 测试框架会更好地匹配。 (例如https://developers.google.com/java-dev-tools/wintester/html/)

    【讨论】:

    • 这是常规的非 RCP 应用程序。
    • 那么您尝试通过使用 IApplication 来实现什么?也许我可以建议更换。
    • 这是某种需求,我相信原因是为了生成所有漂亮的 Eclipse Launcher 及其周边。
    【解决方案2】:

    IApplication 是 Equinox 的一部分,它使用注册表来查找已安装的内容。因此,除了在 PAX 中包含适当的 jar,您还需要确保至少启动声明性服务和扩展注册表包,否则将找不到 IApplication 内容。

    其次,没有调用 EclipseStarter 类的包,该类处理主要参数,并将其传递给运行时。因此,除非您自己这样做,否则您会发现应用程序根本无法运行。

    如果您专门启动 Eclipse,您可能会发现一些特定于 Eclipse 的参数来将这些参数指定为 Java 系统属性:

    http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fruntime-options.html

    例如,您可以指定 -Dapplication.id=yourapp

    您也可以尝试将 eclipse.commands 作为换行符分隔的参数列表。

    【讨论】:

    • 那么我如何使用这个 EclipseStarter 自己运行我的应用程序?
    • 从代码中,您可以将其作为主要方法调用。请参阅stackoverflow.com/questions/4673406/… 和/或我的 Eclipse 书 ;-)
    • 但这不是在 pax-exam 之外打开另一个 osgi 容器吗?因为我看到了,它返回了新的 bundleContext。
    • 是的,这将打开一个新的 OSGi 框架。捆绑上下文是您在系统上的句柄,以便您可以例如在包含的框架中启动和停止包。
    猜你喜欢
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2012-05-12
    • 2018-03-01
    • 1970-01-01
    • 2016-06-11
    • 2019-03-07
    相关资源
    最近更新 更多