这不是将meta-INF / MANIFEST.MF更新为插件osgi项目的情况(如果还没有的话)。它看起来应该像这样:
Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: My-pluginBundle-SymbolicName: com.mycompany.mypluginnameBundle-Version: 1.0.0Bundle-Vendor: MyCompanyBundle-RequiredExecutionEnvironment: JavaSE-1.6Service-Component: import-Package: org.apache.log4j;version="1.2.14" (, separated etc)Export-Package: com.mycompany.mypluginname.myapipackage;version="1.0.0"
然后很好地省略.internal包。平台应该完成其余的工作。
顺便说一句,然后您可以在任何相关的包,插件等中使用import-Package:,而不是取决于jar / project(这是旧的,笨拙的方式,行不通-
您会发现)。
这使您可以大量分离代码依赖项。如果您决定插件代码应该属于另一个jar / bundle,则只需移动各个软件包,然后使新的bundle /
-plugin导出它即可。由于客户端捆绑包仅从“云”(云是OSGi平台)导入软件包,因此您可以更自由地移动代码。
注意
:如评论中所述,您无需在OSGi中运行您的应用程序即可获得此“好处”。Eclipse可以在OSGi软件包限制下编译其代码,并且您的构建/服务器可以在“不受保护的世界”中运行。例如,OSGi清单不对第三方(希望使用.internal的任何方)执行任何强制措施,但向需要它们的人提供“通知”和限制。



