如何解决 SonarLint eclipse 缺少的必需包

How to resolve missing required bundle for SonarLint eclipse

我在 Eclipse Luna 中加载 SonarLint 2.2.0 时遇到问题。官方网络文档说 Eclipse Luna 支持 2.2.0 版本。我也可以毫无问题地从 Eclipse Marketplace 安装 SonarLint。但是在 eclipse 重新启动时,SonarLint 无法加载。诊断插件,我发现有一些丢失的包,如下图所示。

从 OSGI 控制台检查包时,我得到了包,它处于活动状态,但版本不同,如下所示。

看到这里,如果有的话,我认为我不应该将 Equinox 降级到 0.0.0 版本。而且不确定我该如何处理。任何帮助将不胜感激。

谢谢

您是否已将这些插件作为 'Required-Bundle' 添加到您的清单中?

我在 OSGi 控制台中看到了同样的问题和 运行 诊断。 我发现 SonarLint eclipse 包引用了核心 SonarLint 包的 2.3.1 版本,而插件有效负载包括核心包的 2.4.0 版本。

例如:diag 命令显示 sonarlint.eclipse.core 包正在引用 sonarlint-client-api_2.3.1,而插件负载包括 sonarlint-client-api_2.4.0。

注意:我在 OP 提供的诊断 window 底部看到了相同的版本问题。

我认为 SonarLint 2.2 包需要 rebuilt/repackaged 具有正确的包版本。

这是我的 OSGi 控制台输出以供参考。

osgi> ss
...
1241    INSTALLED   org.sonarlint.eclipse.core_2.2.0.201607291419-RELEASE
1242    INSTALLED   org.sonarlint.eclipse.jdt_2.2.0.201607291419-RELEASE
1243    INSTALLED   org.sonarlint.eclipse.ui_2.2.0.201607291419-RELEASE
1244    INSTALLED   org.sonarsource.sonarlint.core.sonarlint-client-api_2.4.0
1245    INSTALLED   org.sonarsource.sonarlint.core.sonarlint-core_2.4.0


osgi> diag 1241
reference:file:plugins/org.sonarlint.eclipse.core_2.2.0.201607291419-RELEASE.jar [1241]
  Direct constraints which are unresolved:
    Missing required bundle org.sonarsource.sonarlint.core.sonarlint-client-api_2.3.1.
    Missing required bundle org.sonarsource.sonarlint.core.sonarlint-core_2.3.1.
    Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
  Leaf constraints in the dependency chain which are unresolved:
    reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-core_2.4.0.jar [1245]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
    reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-client-api_2.4.0.jar [1244]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".

osgi> diag 1242
reference:file:plugins/org.sonarlint.eclipse.jdt_2.2.0.201607291419-RELEASE.jar [1242]
  Direct constraints which are unresolved:
    Missing required bundle org.sonarlint.eclipse.core_0.0.0.
    Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
  Leaf constraints in the dependency chain which are unresolved:
    reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-core_2.4.0.jar [1245]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
    reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-client-api_2.4.0.jar [1244]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
    reference:file:plugins/org.sonarlint.eclipse.core_2.2.0.201607291419-RELEASE.jar [1241]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".

osgi> diag 1243
reference:file:plugins/org.sonarlint.eclipse.ui_2.2.0.201607291419-RELEASE.jar [1243]
  Direct constraints which are unresolved:
    Missing required bundle org.sonarlint.eclipse.core_0.0.0.
    Missing imported package org.sonarsource.sonarlint.core.client.api.connected_0.0.0.
    Missing imported package org.sonarsource.sonarlint.core.client.api.util_0.0.0.
    Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
  Leaf constraints in the dependency chain which are unresolved:
    reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-core_2.4.0.jar [1245]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
    reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-client-api_2.4.0.jar [1244]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
    reference:file:plugins/org.sonarlint.eclipse.core_2.2.0.201607291419-RELEASE.jar [1241]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".

osgi> diag 1244
reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-client-api_2.4.0.jar [1244]
  Direct constraints which are unresolved:
    Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".

osgi> diag 1245
reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-core_2.4.0.jar [1245]
  Direct constraints which are unresolved:
    Missing required bundle org.sonarsource.sonarlint.core.sonarlint-client-api_2.4.0.
    Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
  Leaf constraints in the dependency chain which are unresolved:
    reference:file:plugins/org.sonarsource.sonarlint.core.sonarlint-client-api_2.4.0.jar [1244]
      Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".

SonarLint for Eclipse 的 2.2.0 版移至 Java 8(以及库 SonarLint Core)。因此,所有这些包的 MANIFEST 都更新为需要 JavaSE-1.8 执行环境。

如果您的 Eclipse 安装无法提供此要求,则不会加载 SonarLint 插件。我同意这种无声的失败是一种耻辱,但如果您有改进的想法,请告诉我。

您的 Eclipse 不提供 JavaSE-1.8 的可能原因:

  • Eclipse 是从 Java < 8 开始的。要确定,只需打开帮助 -> 关于 Eclipse -> 安装详细信息 -> 配置并查找 属性 java.version。这里的解决方案很简单:运行 Eclipse with a JVM 1.8+.
  • 您使用的是非常旧的 Eclipse 版本 (< Kepler SR1)。没有 Java 1.8 配置文件,因此即使您使用 JVM 1.8(请参阅 https://bugs.eclipse.org/bugs/show_bug.cgi?id=387699). Luna is supposed to be supported, but if you upgraded from an older version of Eclipse if may be broken (see How do I add execution environment 1.8 to Eclipse Luna?)它也无法工作。尝试全新安装 Luna 或更新版本。