【问题标题】:How to deal with dependencies with "provided" scope in OSGi如何处理 OSGi 中“提供”范围的依赖关系
【发布时间】:2017-08-21 11:39:08
【问题描述】:

有很多教程,展示了如何处理 OSGi 项目的依赖关系以及如何将它们转换为捆绑包。经过一天多的研究,我仍然没有找到如何处理provided范围的依赖关系。

让我举个例子。我目前正在使用Dropbox(dropbox-core-sdk 3.0),它有两个依赖项(com.google.androidjavax.servlet)和provided 范围。当我使用maven-bundle-pluginbnd 等技术时,它只下载工件及其传递依赖项。但是,我还需要提供依赖项才能将我的项目导入 OSGi 容器。

我正在使用maven-bundle-plugin,而我的pom.xml 看起来像:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <Export-Package>*</Export-Package>
                    <Embed-Transitive>true</Embed-Transitive>
                    <Embed-Dependency>*</Embed-Dependency>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

即使Embed-Dependency 说包含所有内容,jar 中也只有依赖项 + 传递依赖项。但是,我希望提供的范围 jars 也在 jar 中。

有没有办法下载 provided 范围的依赖项。如果没有,这种情况如何处理?

【问题讨论】:

    标签: maven osgi dependency-management bnd maven-bundle-plugin


    【解决方案1】:

    我不得不听从 Maven BND 专家的意见,但我认为您不能通过 Maven 构建包含提供的依赖项。由于您不太可能在捆绑包之外使用 Android 组件,您不能手动下载所需的 Jar 并将它们放入您的捆绑包(Bundle-Classpath)吗?

    【讨论】:

    • 感谢大卫的回答。我选择了像 dropbox 这样非常糟糕的 api 来从 osgi 开始,因为它是一个巨大的库,并且对所有内容都具有依赖性。手动处理所有这些依赖项几乎是不可能的。这就是为什么,我想自动化这个过程。
    • 我已经手动下载了所需的 jar 并将它们放在我的包中,但 android 也有数千个依赖项(传递 + 提供)。我实际上被卡住了,不知道如何走得更远。
    • 我明白了,也许 Maven BND 专家可以发布解决方案。作为另一种方法,您可以将 Dropbox 项目作为单独的 Java 进程运行,并通过 MQTT 或 REST 与 Kura 通信。我已经看到这种方法用于不适合 OSGi 架构的应用程序。
    【解决方案2】:

    我认为您可以指定要嵌入的依赖项的范围。请注意,某些依赖项(如 OSGi 规范 jar)永远不应部署。

    通常,您只能嵌入隐藏在包中的依赖项。任何需要与其他包通信的包最好不要部署。

    例如,servlet api 通常由您使用的 httpservice 包提供。

    试试这个选项:

    &lt;Embed-Dependency&gt;*;scope=compile|provided&lt;/Embed-Dependency&gt;

    【讨论】:

    • 谢谢克里斯蒂安,我已经编辑了我的答案。在Maven的配置中,我已经说过需要包含所有的依赖。
    猜你喜欢
    • 2017-01-15
    • 1970-01-01
    • 2015-05-11
    • 2018-05-19
    • 2015-04-12
    • 1970-01-01
    • 2015-07-15
    • 2018-12-02
    • 2021-12-14
    相关资源
    最近更新 更多