Eclipse 插件代码找不到 "javax.inject.Inject" class,插件 jars 现在不在插件目录中

Eclipse plugin code can't find "javax.inject.Inject" class, plugin jars now not in plugins directory

我正在尝试调试一个 Eclipse 插件,该插件在 2019 年 9 月左右出现了一个错误。平台中一定发生了某些变化,导致它不再工作。

我可以 运行 rcp 2018-12 发行版并对其进行测试,我验证它是否有效。我能够单步执行处理程序代码。

如果我 运行 2019-12 发行版,我无法完全编译该项目,正如它所说 "The type javax.inject.Inject cannot be resolved."。当我尝试在 2018-12 发行版中打开类型 javax.inject.Inject 时,它会在发行版的“eclipse/plugins/javax.inject_1.0.0.v20091030.jar”中找到它。当我检查那个 "plugins" 目录时,我发现了很多单独的插件 jar。

在 2019-12 发行版中,它找不到 javax.inject.Inject,当我查看那个插件目录时,我只找到一个 jar,"org.eclipse.equinox.launcher" jar。

我记得 single launcher jar 的这个主题,但我不知道这是导致这个编译错误的直接原因,还是我必须做些什么才能继续。

更新:

为了回应非常感谢的回答,以下是我的发现:

我确实找到了一个 ~/.p2 目录,我在那里找到了 javax.inject 插件。当我检查 "Target Platform" 设置时,我在 2018-12 和 2019-12 实例中看到非常相似的信息(插件数量变化非常小)。

我检查了所有 MANIFEST.MF 个文件,其中 none 个文件只有一个 "Import-Package" 语句。我知道建议是添加一个,但我想了解为什么我在 2018-12 年没有看到错误。

当我在 Project Explorer 中查看 "Plug-in Dependencies" 列表时,我在 2018-12 的列表中看到了 "javax.inject",但在 2019-12 中没有看到它。

当我 select MANIFEST.MF 文件并在表单模式下查看它,然后 select "Dependency Analysis" 然后 "Show the plug-in dependency hierarchy",我可以看到"org.eclipse.core.runtime",也就是2018-12的版本3.15...和2019-12的版本3.17...有不同的依赖。特别是,在 3.15 中,依赖项之一是 "javax.inject"。在 3.17 中,这不是它的依赖项之一。

所以,我可以看到一个可能的解决方案肯定是为 "javax.inject" 添加一个 "Import-Package",但是你能解释为什么 NONE 可能是 [=57] =] 文件只有一个 "Import-Package" 语句了吗?

如果您使用的是与 Oomph 安装程序一起安装的 Eclipse,则插件可以位于不同的位置(我认为是您主目录中的 .p2 目录)。 javax.inject 插件应该仍然与所有其他 Eclipse 插件一起存在。

插件通常引用 javax.inject 在 MANIFEST.MF 中使用 Import-Package 而不是指定所需的插件使用 Require-Package 所以:

Import-Package: javax.inject

在 2018-12 和 2019-12 之间,这方面没有任何重大变化。 javax.inject的版本还是一模一样

检查您配置的目标平台(首选项 > 插件开发 > 目标平台)- 确定可用的插件。

更新: 您现在需要添加 Import-Package 的原因是 Eclipse 错误 487676 which removed the 're-export' of the javax.inject dependency from org.eclipse.core.runtime so that you now have to explicitly add it. This is also documented in the Whats New 对 Eclipse 2019-09 (4.13)

所做的更改