如何在 OSGi 中处理 "provided" 作用域的依赖关系
How to deal with dependencies with "provided" scope in OSGi
有很多教程,展示了如何处理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 中也只有依赖项 + 传递依赖项。但是,我希望提供的范围内的罐子也在罐子里。
有什么方法可以下载 provided
范围内的依赖项。如果没有,这种情况怎么处理?
我认为您可以指定要嵌入的依赖项的范围。请注意,某些依赖项(如 OSGi 规范 jar)永远不应部署。
一般来说,您只能嵌入隐藏在包中的依赖项。最好不要部署任何需要与其他包通信的包。
例如,servlet api 通常由您使用的 httpservice 包提供。
试试这个选项:
<Embed-Dependency>*;scope=compile|provided</Embed-Dependency>
我不得不服从那里的 Maven BND 专家,但我认为您不能通过 Maven 构建包含提供的依赖项。由于您不太可能在包外使用 Android 组件,难道您不能手动下载所需的 Jar 并将它们放入包中(Bundle-Classpath)吗?
有很多教程,展示了如何处理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 中也只有依赖项 + 传递依赖项。但是,我希望提供的范围内的罐子也在罐子里。
有什么方法可以下载 provided
范围内的依赖项。如果没有,这种情况怎么处理?
我认为您可以指定要嵌入的依赖项的范围。请注意,某些依赖项(如 OSGi 规范 jar)永远不应部署。
一般来说,您只能嵌入隐藏在包中的依赖项。最好不要部署任何需要与其他包通信的包。
例如,servlet api 通常由您使用的 httpservice 包提供。
试试这个选项:
<Embed-Dependency>*;scope=compile|provided</Embed-Dependency>
我不得不服从那里的 Maven BND 专家,但我认为您不能通过 Maven 构建包含提供的依赖项。由于您不太可能在包外使用 Android 组件,难道您不能手动下载所需的 Jar 并将它们放入包中(Bundle-Classpath)吗?