【发布时间】:2013-11-26 21:02:24
【问题描述】:
我使用maven-bundle-plugin 将一个库打包为一个OSGi 包,它使用BND。我注意到 BND 生成了一个很长的 Export-Package 列表,主要是因为它包含了许多由库本身在其他导出包的 uses 指令中导出的包。
我(有点)理解uses 指令。我假设在这种情况下,其他包的类(在uses 下列出)被导出包中的类用于方法签名(因此导入)。
从这个意义上说,我有两个问题:
- 真的有必要在导出包的
uses指令中包含由同一个包导出的包吗?这些包不会被任何其他包导出;因此没有拆分包。 - 此行为是否表明库的包结构定义不正确?顶级包使用的几个类通常位于子包中,反之亦然。这是一个被改编为 OSGi 包的库。包结构不是为 OSGi 友好而设计的。
这是清单中列出的大多数导出包的方式
Export-Package: org.lib.annotation;version="10",org.lib.coverage;version="10";
uses:="javax.measure.unit, org.lib.annotation,org.lib.geometry,org.lib.ref,org.
lib.ref.operation,org.ref.util"
从以上uses 列表中的所有包中,只有javax.measure.unit 是从另一个包中导入的。
maven-bundle-plugin 配置:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.4.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${parsedVersion.osgiVersion}</Bundle-Version>
<Export-Package>org.lib.*;version=${project.version}</Export-Package>
<Import-Package>*</Import-Package>
<_experiments>true</_experiments>
</instructions>
</configuration>
</plugin>
【问题讨论】:
标签: java osgi bnd maven-bundle-plugin