eclipse rcp中插件依赖和lib有什么区别

What is the difference between plug-in dependencies and lib in eclipse rcp

我有一个大型 eclipse RCP 应用程序。查看 Package Explorer 视图,我有很多插件。在每个插件下都有一个插件依赖项部分和一个 lib 目录。 Plug-in Dependencies 部分的jar 和lib 目录有什么区别? Plug-in Dependencies 部分不是磁盘上的物理目录。插件依赖项部分是 plugin.xml 文件的可视化表示吗?这两个不同的东西有什么关系?

插件依赖项部分显示了此插件使用的其他插件。这对应于插件 META-INF/MANIFEST.MF 的 'Require-Bundle' 和 'Import-Package' 部分。

任何 'lib' 文件夹都不是插件的标准功能。如果插件需要使用一些非插件 jar,它们可以包含在插件中,通常放在 'lib' 文件夹中。 MANIFEST.MF 中的 'Bundle-ClassPath' 条目列出了插件类路径中包含的所有内容。

注意:Eclipse 插件符合 OSGi 规范。 OSGi 调用插件 'Bundles'.

举个例子,MANIFEST.MF 来自我的一个 RCP 中的一个插件:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: greg.music.ogg;singleton:=true
Bundle-Version: 2.0.0.qualifier
Bundle-Vendor: %plugin.provider
Bundle-Localization: plugin
Require-Bundle: greg.music.core;bundle-version="1.0.0",
 greg.music.resources;bundle-version="1.0.0",
 org.eclipse.core.runtime,
 javazoom.jlgui.basicplayer,
 org.eclipse.e4.core.services;bundle-version="2.0.100"
Bundle-ClassPath: .,
 lib/jogg-0.0.7.jar,
 lib/jorbis-0.0.15.jar,
 lib/vorbisspi1.0.2.jar
Bundle-RequiredExecutionEnvironment: JavaSE-9
Import-Package: javax.annotation;version="1.0.0",
 javax.inject;version="1.0.0",
 org.eclipse.e4.core.di.annotations

另外 5 个插件有一个 'Require-Bundle',另外 3 个软件包有一个 'Import-Package'。 'Bundle-Classpath' 包括主要插件代码(显示为“.”)和 'lib' 目录中的 3 个 jar。