我所熟悉的Import-Package
和Export-Package
,不过这对我来说是一个新的。 它有什么作用?
Answer 1:
在OSGi容器中运行时,它什么都不做。 事实上,它甚至没有在OSGi规范(我查R4)提及。
然而,它可以在指定.bnd
在构建时由BND使用的文件。 如果是的话,它可以被用来决定进入束。 当BND构建束,它会自动确定哪些类需要进入束。 所有程序包,出口类都包括在内,以及所有他们依赖于(及物动词)的类都包含了。 这意味着,如果一个类似乎没有被使用,那么就不会被包含在捆绑。 但是,您可以使用私营包指令告诉BND包括包在包中的内容,即使这似乎是不用的。 如果没有指定私营包指令,然后它会自动生成BND。
对于文档私募套餐内容如下:
私人包
夹杂物的方法是相同的导出-Package头,唯一的区别是,是,这些软件包不导出。 这头会被复制到清单。 如果包是由诺斯出口和私人包报头中选择,然后出口优先。
私人包= COM。*
Answer 2:
如果你知道静态链接是什么,那么你了解私募包。 否则就继续阅读。
私人包是BND的告诉你,必须在jar包的方式,但没有被导出。 这不是一个OSGi头,但一BND“指令”。
该指令从必须被包含在JAR类路径(使用通配符)定义的包。 BND是独一无二的,它填充从规范中的JAR,而不是某个目录最喜欢的构建工具。 其原因是,除非模块是“设计”和它们的布局仔细考虑他们很少提供模块化的好处。
在一般私人-包装规定持有不应该与其他包被共享的类的包,即实现类。 虽然总的来说他们来自该BND在它使用相应的项目是完全可以接受的从classpath中的任何其他JAR得到他们。
一个用例是utils的图书馆。 在束转向一个实用程序库通常具有依赖性,因为utils的往往取决于很多无关的东西造成严重破坏; 你用一个很小的方法,突然你在30MB拖动依赖。 BND本身大量使用这种模式与aQute.lib *包,从这个库包应该永远不会被导出。 这是束的大小和“下载互联网”之间的贸易。 所不同的是之间的Eclipse的和Apache Felix的世界可见。 Apache的费利克斯包通常是独立的,并不需要各种支持和util的包,而Eclipse的捆绑得需要大量的管道束的趋势。 我认为这种差异主要是由Eclipse的PDE,使得它不可能包括从其他项目包,除非你复制源代码这当然是一个大而引起的禁忌。
在C世界里,他们有一些所谓静态链接。 一个程序链接之后,任何unresolveds被从库中检索并添加到目标。 在一定程度上私营包是一样的想法。 实际上有一个头有条件包静态链接指定的包和任何他们传递地依赖于(只要它们落在模式)。
最终BND显示,没有在清单中的私人-Package头出口扩展包。 毕竟,清单应该描述的内容...
如果您是作者,您可以删除与-removeheaders头:私人封装(或与<_removeheaders>私营包装行家
Answer 3:
事实上私营套餐并不仅仅是没有导出包的更多。 如果在私营包装指定的包没有定义里面你自己的项目和进口包装不导入,然后它们会自动内联到您的罐子。 所以这是一个简单的方法,包括非OSGi的依赖。 不过要小心的是内联很容易导致类路径问题。