Equinox/OSGi/Eclipse 插件开发:这些依赖项从何而来,如何指定它们的最低版本?

Equinox/OSGi/Eclipse plugin development: where do these dependencies come from and how do I specify their minimum versions?

我正在 Neon.1a 中开发一个 Eclipse 插件,它使用的库版本对于目标版本 (4.4.x Luna) 来说太新了。安装插件时立即失败是在 org.eclipse.core.filesystem 处,我在代码中使用它来将文本文件写入文件系统。但是,即使我指定了最小值 1.4.0,由于其他隐式依赖关系,它仍会解析为 1.6.0。如何使我的插件与旧版本的 Eclipse 兼容?我是否必须将隐式插件添加为依赖项并在清单中指定它们的最低版本?

MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Workbench
Bundle-SymbolicName: workbench;singleton:=true
Bundle-Version: 1.0.0.beta
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.eclipse.core.filesystem;bundle-version="1.4.0",
 org.apache.commons.io,
 org.apache.commons.lang
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: .,
 swing2swt.jar
Import-Package: javax.xml.bind,
 org.apache.commons.io,
 org.eclipse.core.filesystem,
 org.eclipse.core.runtime,
 org.eclipse.datatools.connectivity,
 org.eclipse.swt,
 org.eclipse.ui,
 org.eclipse.ui.ide,
 org.osgi.framework
Bundle-Activator: Activator
Bundle-ActivationPolicy: lazy

Eclipse 依赖层次结构
Eclipse Dependency Hierarchy

我认为你误解了观点。

您的清单表明您至少需要 org.eclipse.core.filesystem 的 1.4.0 版本,任何更高版本都可以接受。

如果您当前的目标平台是 Eclipse Neon,这将匹配插件的 1.6.0 版本,并且将显示在插件依赖项视图中。这并不意味着需要 1.6.0,此视图只是向您展示了您当前的目标平台将使用什么。

如果您想针对 Eclipse Luna 进行测试,请使用 Luna 创建一个目标平台并对其进行测试。目标平台在 'Plug-in Development > Target Platform' 的首选项中指定。这使您可以使用当前的 Eclipse 创建代码,但可以针对旧版本对其进行测试。