[英]How to read a resource in one java package (osgi bundle) from within another
[英]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.