有很多教程,展示了如何处理OSGi项目的依赖关系以及如何将它们转换为bundle。经过一天以上的研究,我仍然没有找到如何使用provided
范围处理依赖关系。
让我举个例子。我目前正在使用Dropbox
(dropbox-core-sdk 3.0),它有两个具有com.google.android
范围的依赖项(javax.servlet
和provided
)。当我使用maven-bundle-plugin
或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
范围的依赖项。如果没有,如何应对这种情况?
答案 0 :(得分:1)
我不得不顺从那里的Maven BND专家,但我认为你不能通过Maven构建包含提供的依赖项。既然您不太可能在捆绑包之外使用Android组件,那么您是否只能手动下载所需的Jars并将它们放入捆绑包中(Bundle-Classpath)?
答案 1 :(得分:0)
我认为您可以指定要嵌入的依赖项的范围。但要小心,不应该部署像OSGi规范jar这样的依赖项。
通常,您可能只嵌入隐藏在包中的依赖项。最好不要部署与其他软件包交谈所需的任何软件包。
例如,servlet api通常由您使用的httpservice包提供。
尝试此选项:
<Embed-Dependency>*;scope=compile|provided</Embed-Dependency>