【问题标题】:How to get transitive dependencies for a tested bundle for PAX Exam OSGi test runs如何为 PAX 考试 OSGi 测试运行的测试包获取传递依赖项
【发布时间】:2017-04-26 20:01:32
【问题描述】:

我正在使用 PAX Exam 进行集成测试。我要测试的捆绑包依赖于其他几个捆绑包。不幸的是,我无法自动获取所有依赖项。

在我的测试课中

@Configuration
public Option[] config() {
    return options(
        junitBundles(),
        mavenBundle("io.moquette", "moquette-broker")
    );
}

不幸的是,它并没有引入 moquette-broker 的所有依赖项,只是单个 jar 本身。

测试类中有没有办法指定它应该使 moquette-broker 的所有依赖项都可用于运行?有没有办法把它放在考试Maven插件的pom.xml中?当然,我在文档中没有看到任何内容。还是需要我自己在课堂上列举它们?

【问题讨论】:

    标签: java maven osgi integration-testing pax-exam


    【解决方案1】:

    在普通的 PAX 考试中无法获得这种行为。您必须在测试的 @Configuration 元素中列出所有依赖项。

    使用 Apache Karaf 或 bndtools 有两种方法可以简化此操作。两者都以非常不同的方式提供帮助。

    如果您使用 karaf 作为部署平台,那么您可以将您的应用程序定义为一项功能。在该功能中,您必须像在 pax 考试中一样列出所有捆绑包依赖项,但您也可以参考其他此类功能。所以在实践中它的工作量要少得多。 Pax 考试还可以根据功能运行此类 karaf 测试。请参阅Aries JPA example

    另一种选择是使用 bndtools 你首先定义一个索引。该索引可以基于 pom,也可以包括传递依赖。 然后为您的测试定义一个 bndrun 文件,其中仅包含要部署的顶级包。然后,解析器将自动确定有效的运行包列表。 See this test run definition of Aries jax-rs whiteboard。不幸的是,这不能与 pax 考试一起使用。 Bndtools 有自己的运行器。 bndtools 的 maven 集成也不像您在使用的快照版本中看到的那样稳定。下一个版本的 bndtools (3.4.0) 希望允许仅使用发布版本来执行此操作。

    【讨论】:

    • 啊,谢谢克里斯蒂安。我开始认为可能是这样。不幸的。我暂时把它留给 Pax Exam,但一旦他们整理好 Maven 的东西,可能会转移到 bndtools。这是针对其他人的项目,我想将其作为 OSGi 捆绑包。对于我自己的项目,我使用 Gradle 作为构建工具,我将了解 bndtools 在 Gradle 中的工作情况。
    • 卡拉夫看起来很有趣。我通常为我的系统使用香草 Felix,但肯定会考虑将 Karaf 包围我的系统,或者将其用于云端点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2015-08-31
    • 2016-02-06
    • 1970-01-01
    • 2014-02-21
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多