Mar*_*lis 14
在OSGi容器的运行时,它什么都不做.事实上,它甚至没有在OSGi规范中提到过(我检查过R4).
但是,它可以在.bnd文件中指定供构建时使用.如果是这样,它可用于确定捆绑包中的内容.当bnd构建一个bundle时,它会自动确定哪些类需要进入bundle.包含导出的包中的所有类,并且还包括它们所依赖的所有类(可传递).这意味着如果某个类似乎没有被使用,那么它将不会包含在该包中.但是,您可以使用Private-Package指令告诉bnd在包中包含包的内容,即使它看起来是未使用的.如果未指定Private-Package指令,则它将由bnd自动生成.
Private-Package的文档内容如下:
私人套餐
包含的方法与Export-Package标题相同,唯一的区别是,这些包不会被导出.此标头将复制到清单.如果通过导出和私有包标头选择包,则导出优先.
Private-Package = com.*
Pet*_*ens 12
如果你知道什么是静态链接,那么你就会理解私有包.否则请继续阅读.
Private-Package是告诉你必须在jar中但不导出的包的方式.它不是 OSGi标题,而是bnd'指令'.
该指令定义了必须包含在JAR中的类路径(带有通配符)的包.bnd是唯一的,它从规范填充JAR,而不是像大多数构建工具那样填充某些目录.原因是除非模块是"设计"的并且仔细考虑了它们的布局,否则很少提供模块化的好处.
通常,Private-Package指定包含不应与其他包共享的类的包,即实现类.虽然一般来说它们来自相应的项目,但是在其中使用bnd是完全可以从类路径上的任何其他JAR获取它们.
一个用例是带有utils的库.在一个包中转换一个util库通常会对依赖关系造成严重破坏,因为utils往往依赖于许多不相关的东西; 你使用一个小方法,突然你拖入30Mb的依赖项.bnd本身大量使用此模型和aQute.lib*包,永远不应导出此库中的包.它是捆绑大小和"下载互联网"之间的交易.Eclipse和Apache Felix的世界之间存在差异.Apache Felix捆绑包通常是独立的,不需要所有类型的支持和util包,而Eclipse的捆绑包往往需要大量的管道捆绑包.我认为这种差异很大程度上是由Eclipse引起的
在C世界中,他们有一种称为静态链接的东西.链接程序后,将从库中检索任何未解析的程序并将其添加到目标中.在某种程度上,私人包装是一样的想法.实际上有一个标题条件包,它静态地链接指定的包和它们可传递依赖的任何东西(只要它们属于模式).
最后,bnd显示未在清单中的Private-Package标头中导出的扩展包.毕竟,清单应该描述内容......
如果您是作者,则可以使用-removeheaders删除标题:Private-Package(或者使用<_removeheaders>私有包的maven)
事实上,Private-Package 的作用不仅仅是不导出包。如果 Private-Package 中指定的包未在您自己的项目中定义,并且未在 Import-Package 中导入,那么它们会自动内联到您的 jar 中。因此,这是包含非 OSGi 依赖项的简单方法。但要小心,内联很容易导致类路径问题。
| 归档时间: |
|
| 查看次数: |
4616 次 |
| 最近记录: |