本文详解 tycho 构建 eclipse rcp 项目时因 org.sonarlint.eclipse.ui 依赖未解析而失败的问题,重点指导如何在 target definition 文件中正确配置 sonarlint 更新站点,使 tycho 能成功解析并拉取所需 iu。
本文详解 tycho 构建 eclipse rcp 项目时因 org.sonarlint.eclipse.ui 依赖未解析而失败的问题,重点指导如何在 target definition 文件中正确配置 sonarlint 更新站点,使 tycho 能成功解析并拉取所需 iu。
Tycho 构建失败的根本原因在于:你的插件(如 com.sisnet.ide.plugin)在 MANIFEST.MF 或 plugin.xml 中声明了对 org.sonarlint.eclipse.ui(≥7.10.0)的依赖,但 Tycho 的目标平台(Target Platform)中并未包含该 Bundle。Tycho 不从 Maven Central 解析 Eclipse 插件,而是严格依赖 P2 仓库(即 *.target 文件定义的 Installable Units)。即使你在 pom.xml 中配置了 Eclipse 发布版仓库(如 https://download.eclipse.org/releases/latest),它也不包含 SonarLint——因为 SonarLint 是第三方插件,托管在独立的 P2 仓库中。
✅ 正确解决方案是:在你的 .target 文件中显式添加 SonarLint 的官方 P2 仓库地址。
假设你的 target 定义文件名为 com.sisnet.ide.target/com.sisnet.ide.target.target(位于 com.sisnet.ide.target/ 模块下),请按以下步骤操作:
- 在
标签内新增一个 元素; - 使用 type="InstallableUnit" 指定为 P2 可安装单元;
- 引用 SonarLint 的 Feature Group ID,并指向其官方更新站点:
<location includeallplatforms="false" includeconfigurephase="true" includemode="planner" includesource="true" type="InstallableUnit"><unit id="org.sonarlint.eclipse.feature.feature.group" version="0.0.0"></unit><repository location="https://eclipse-uc.sonarlint.org"></repository></location>
? 关键说明:
- version="0.0.0" 表示接受该 Feature 的任意可用版本(Tycho 会自动解析满足 Require-Bundle: org.sonarlint.eclipse.ui;bundle-version="[7.10.0,)" 的最新兼容版本);
- includeSource="true" 确保源码 Bundle(如 org.sonarlint.eclipse.ui.source)也被纳入目标平台,便于调试;
- includeConfigurePhase="true" 保证该仓库参与 Tycho 的依赖解析阶段(resolve-dependencies),而非仅用于最终产品打包。
⚠️ 注意事项:
- 不要尝试在 pom.xml 中通过
添加 https://eclipse-uc.sonarlint.org —— Tycho 完全忽略 Maven 配置,只认 P2 ; - 若使用 Eclipse IDE 编辑 .target 文件,请右键 → Set as Target Platform 刷新后验证 org.sonarlint.eclipse.ui 是否出现在 Target Platform 内容列表中;
- 构建前建议执行 mvn clean 清理旧缓存,避免 Tycho 复用不完整的 target 平台;
- 若后续升级 SonarLint 版本,只需刷新 target 文件(或点击 Eclipse 中的 Reload),无需修改 pom.xml 或手动下载 JAR。
完成配置后,重新运行 mvn clean verify,Tycho 将从 https://eclipse-uc.sonarlint.org 下载所需的 IU 并成功解析依赖,构建流程即可顺利通过。此方案符合 OSGi 和 Eclipse PDE 的模块化设计原则,也是 Tycho 官方推荐的第三方插件集成方式。











