2

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

让我举个例子。我目前正在使用Dropbox(dropbox-core-sdk 3.0),它有两个依赖项 ( com.google.androidand javax.servlet) 和provided范围。当我使用maven-bundle-pluginor等​​技术bnd时,它只下载工件及其传递依赖项。但是,我还需要提供依赖项才能将我的项目导入 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 中也只有依赖项 + 传递依赖项。但是,我希望提供的范围内的 jar 也在 jar 中。

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

4

2 回答 2

1

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

于 2017-03-28T20:27:37.310 回答
0

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

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

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

试试这个选项:

<Embed-Dependency>*;scope=compile|provided</Embed-Dependency>

于 2017-03-28T12:18:07.707 回答