繁体   English   中英

无法从OSGI中的另一个软件包导入一个软件包

[英]Unable to import package of one bundle from another in OSGI

我在Eclipse中有一个多模块Maven项目。 我尝试从一个模块/捆绑包导出软件包,因此可以在另一个模块中访问它。
但是我无法访问另一个捆绑包中的包/类。

我的项目结构如下:

MainProject  
    Module1  
        subModuleA  
        subModuleB  
        subModuleC  
    Module2  
    Module3  

我从Module3导入了一个程序包,并希望在subModuleC中使用它,但是当我键入程序包名称时,它是不可访问的。
我正在使用Apache ServiceMix和Apache Karaf编写和部署我的捆绑包。
可以在下面看到POM.xml的一部分:
(另外,我应该为我的Bundles选择哪种BundleType?)

Module3的配置:

        <configuration>
            <instructions>
                <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                <Bundle-Description>${project.description}</Bundle-Description>
                <Import-Package>*;resolution:=optional</Import-Package>                      
                <Export-Package>org.MyProj.ManageSQL.Interface.*, org.postgresql.*, com.mysql.jdbc.*</Export-Package> 
                <Private-Package>org.MyProj.ManageSQL.*, org.json</Private-Package>
                <BundleType>??</BundleType>
            </instructions>
        </configuration>

subModuleC的配置:

        <configuration>
            <instructions>
                <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                <Bundle-Description>${plantcockpit.os.description}</Bundle-Description>
                <Import-Package>
                    org.apache.camel.osgi,
                    org.MyProj.ManageSQL.Interface.SqlService,
                    com.fasterxml.jackson.core,
                    com.fasterxml.jackson.databind.*,
                    com.fasterxml.jackson.module.jsonSchema.*,
                    org.apache.commons.net.ftp.*,
                    *           
                </Import-Package>
                <Export-Package>
                    org.MyProj.SubModuleC
                </Export-Package>
                <Private-Package>
                    org.MyProj.SubModuleC.*,
                    org.json,
                </Private-Package>
                <Bundle-Type>???</Bundle-Type>
            </instructions>
        </configuration>

为什么要导出org.postgresql包? 如果需要包装,只需安装官方jar。 嵌入和导出它可能会导致一些奇怪的依赖链或类加载问题。 org.json相同。
通用库应位于它们自己的捆绑包中。 如果您希望/需要将它们嵌入到包中,则必须知道您在做什么

我建议您将解决进出口问题交给maven-bundle-plugin 当捆绑包工作时,请手动进行调整。

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>3.3.0</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Import-Package>
                *
            </Import-Package>
            <Export-Package>
                !this.package.will.not.be.exported,
                *
            </Export-Package>
        </instructions>
    </configuration>
</plugin>

有一些工具可以在运行时检查捆绑软件的导入/导出。 Karaf控制台中,键入headers <bundleid>imports <bundleid> Karaf将向您显示导入了哪些包以及从哪个包中导入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM