捆绑清单依赖项

Bundle Manifest dependencies

最近我被指派改进 Eclipse 插件的相互依赖结构。我们称它为 "core" 并假设以下清单描述了此 eclipse 插件,所有其他插件都指向该插件以便它们访问服务(RMI、OSGi 服务)。这些服务可以通过使用 "rmiservices.jar"(Maven 生成的工件)和另一个名为 "org.osgiservice" 的 eclipse 插件来访问。其他包参考 "core" 包并使用 Export-Package 声明来使用这些服务。

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: core
Bundle-SymbolicName: coreid;singleton:=true
Bundle-Version:  0.0.1
Bundle-Activator: org.sample.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Export-Package: org.sample.api, 
 org.rmiservice,
 org.osgiservice
Bundle-Localization: plugin
Bundle-ClassPath: lib/rmiservices.jar
Require-Bundle: org.osgiservice;bundle-version="1.0.0";visibility:=reexport

为了改善依赖结构而出现的问题是:

  1. "core" 插件在其生成的 jar 中包含 rmiservices.jar。将 rmiservices.jar 作为单独的捆绑包会更好吗?
  2. rmiservices.jar 是 Maven 生成的工件。将其移至 P2 存储库并将其公开在目标定义中会有好处吗?

您应该将 jar 放入其自己的包中。如果您的应用程序增长,您可能需要从不同的包访问该库。使用本地 jar,您可能会冒不同版本被不同包加载的风险(由于那些本地 jar 副本),导致运行时出现非常奇怪的错误。

如果 jar 在 P2 中可用,那么您可以使用 Tycho 轻松构建完整的应用程序。构建过程的自动化和可重现性非常值得短暂更长的构建时间。