gpt4 book ai didi

java - 无法在 OSGI 中从另一个包导入一个包的包

转载 作者:行者123 更新时间:2023-12-02 12:09:30 26 4
gpt4 key购买 nike

我在 Eclipse 中有一个多模块 Maven 项目。我尝试从一个模块/ bundle 导出包,以便可以在另一个模块中访问它。
但我无法访问另一个包中一个包的包/类。

我的项目结构如下:

MainProject  
Module1
subModuleA
subModuleB
subModuleC
Module2
Module3

我从 Module3 导入一个包并想在 subModuleC 中使用它,但是当我输入包名称时,它无法访问。
我正在使用 Apache ServiceMix 和 Apache Karaf 来编写和部署我的 bundle 。
POM.xml的部分内容如下:
(另外我应该为我的 bundle 选择什么 BundleType???)

模块3的配置:

        <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>

子模块C的配置:

        <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 相同.
公共(public)库应该存在于它们自己的包中。如果您想要/需要将它们嵌入到您的 bundle 中,您必须 know what you are doing .

我建议你把解决 import/export 的工作交给maven-bundle-plugin 。当你的 bundle 工作时,然后手动调整。

<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>

有一些工具可以在运行时检查 bundle 的导入/导出。来自 Karaf console类型headers <bundleid>imports <bundleid> 。 Karaf 将向您显示导入了哪些包以及从哪个包中导入的包。

关于java - 无法在 OSGI 中从另一个包导入一个包的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com