【问题标题】:OSGI nested dependency jarsOSGI 嵌套依赖 jars
【发布时间】:2026-02-09 04:15:01
【问题描述】:

如果我有一个 OSGI Bundle,它的依赖 jar 嵌套在 OSGI Bundle jar 中,我是否需要在 Import-Package 清单中列出这些类以便我可以使用它们?我认为不会。

另外,我如何将这些依赖 jar 添加到我的包中。我只是将它们放在根文件夹中吗?我是否需要在清单文件中添加任何内容才能使用这些依赖项?

【问题讨论】:

    标签: osgi


    【解决方案1】:

    避免手动使用 Bundle-ClassPath。您可以使用 maven-bundle-plugin 来解决和嵌入您的第三方依赖项,如下所示:

    <plugins>
    
    <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.5.3</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
        <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName>
        <Bundle-Version>${project.version}</Bundle-Version>
        <Export-Package>lumina.extensions.drivers.luminadb</Export-Package>
        <Bundle-Activator>lumina.extensions.drivers.luminadb.internal.Activator</Bundle-Activator>
        <Embed-Dependency> YOUR ARTIFACT ID HERE </Embed-Dependency>
        </instructions>
    </configuration>
    </plugin>
    (...)
    
    </plugins>
    

    欲了解更多信息,请访问http://web.ist.utl.pt/ist162500/?p=110

    【讨论】:

      【解决方案2】:

      您不应将 Import-Package 用于嵌入式 jar。而是使用 Bundle-ClassPath: .,myjar.jar 将嵌入的 jar 添加到包类路径中。

      【讨论】:

      • 谢谢。如果我分解这些 jar,然后将它们复制到我的 bundle jar 中,我还需要在清单中放入任何东西吗?
      • 在这种情况下,您不需要任何特殊设置。您可以使用 Maven 捆绑插件来执行此操作。如果您将包指定为本地尚未存在的私有包,则它们是从 Maven 依赖项中嵌入的。所以它们最终会作为 .class 文件进入你的包中。