无法从OSGI中的另一个包中导入另一个包
我在Eclipse中有一个多模块maven项目。我尝试从一个模块/软件包中导出软件包,因此可以在另一个模块中访问它。
但我无法访问另一个包中的包/类。无法从OSGI中的另一个包中导入另一个包
我的,项目结构如下:
MainProject
Module1
subModuleA
subModuleB
subModuleC
Module2
Module3
我汇入单词数一个包,并希望在subModuleC使用它,但是当我键入软件包的名称,它是不可访问。
我使用Apache ServiceMix和Apache Karaf编写和部署我的Bundle。 pom.xml中的
部分可以看到下面:
(还有什么BundleType我应该选择我捆绑???)
单词数的配置:
<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
也一样。
公共图书馆应该生活在自己的包中。如果你想/需要将它们嵌入你的包中,你必须know what you are doing。
我建议你将解决进口和出口的工作留给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 console类型headers <bundleid>
或imports <bundleid>
。卡拉夫会告诉你什么包是从哪个包导入的。
'
你可能根本不需要那些'Import-Package'块。删除它们。尤其是附加到Module3的...为什么你想要一个bundle的所有进口可选?关于'Bundle-Type',没有这样的OSGi头文件,所以你可以删除它。或者把你喜欢的东西放在那里,我想。 –
'私人包裹'部分也是毫无意义的。 –