Buildship:从诞生到融入 Eclipse

在 Gradle,我们相信维护开发人员的“流畅状态”对于构建良好的软件至关重要。由于我们相信流畅性至关重要,我们断言开发人员不应该离开 IDE 来构建,也不应该知道 IDE 执行哪些功能以及哪些功能委托给构建系统。我们的愿景也是将所有构建逻辑完全保留在构建系统中,因此所有用于计算项目配置、构建项目、运行测试和运行可执行文件的工作都从 IDE 委托给构建系统。因此,IDE 映射构建的项目,可视化构建模型,并显示执行构建的进度。

为了实现我们对理想 IDE Gradle 交互的愿景,我们决心构建并提供我们自己的参考实现,以指导其他 IDE 的实现者。因此,在 2014 年秋季,Gradle Inc. 决定为 Gradle 提供自己的 Eclipse 插件,以便在 Eclipse 中使用 Gradle 时为用户提供最佳体验。

Buildship 受邀加入 Eclipse Mars 发布列车

在我们开始实施不久后,Eclipse 基金会 询问我们是否愿意为 Gradle 贡献一个 Eclipse 插件,并将该插件纳入 Eclipse Mars 发布列车。这与我们展示 IDE 和构建应该如何交互的愿景相吻合,并进一步使我们能够为全球庞大的 Eclipse 用户群体提供最佳的 Gradle 支持。我们同意了,由 eclipse.org 定义的项目入职流程立即开始。

我们的第一步是找到一个独立于 Gradle 或 Eclipse 的名称并将其注册商标,因此 Buildship 项目诞生并正式成立。后缀“ship”有一种很好的感觉,表示状态、性格、办公室、技能,如“Fellowship”或“Statesmanship”,但也强调了发布软件的重要性。从一开始,Eclipse 基金会的 Wayne Beaton 就帮助我们完成了从无名项目到成为 Eclipse 同步发布的一部分项目的正式流程中涉及的无数步骤。

Gradle 构建 Eclipse 包

在实现方面,我们于 2015 年 1 月开始创建 Gradle 构建,用于编译、测试、组装和部署 Eclipse 捆绑包。当时没有现成的解决方案可以利用。我们对自身新构建的开发是逐步进行的,Gradle 的 buildSrc 功能被证明非常宝贵,它帮助我们快速完善构建逻辑。如今,我们的构建非常稳定,其逻辑被封装在 buildSrc 文件夹中定义的 Gradle 插件中,这些插件足够通用,可以被其他 Eclipse 捆绑包项目使用。查看我们 Gradle 构建 的高级逻辑,我们不可能用 Maven 达到相同的 简洁性和表达能力,而 Maven 仍然是 Eclipse 捆绑包项目的普遍选择。

Buildship 在 3 月份的 EclipseCon NA 上首次亮相

一旦 Gradle 构建建立起来,并在其之上建立了 持续集成管道,我们就可以开始专注于 Gradle 的 Eclipse 插件的内容。我们从任务视图开始,然后进行项目导入,添加运行配置和控制台视图,最后集成到现有的 Eclipse 测试运行器中。这是我们在 2015 年 3 月的 EclipseCon NA 上展示的状态。

Gradle 为 Buildship 投入更多开发人员

为了加速 Buildship 的开发,并确保我们能够在 2015 年 6 月的 Eclipse Mars 版本发布截止日期前完成开发,我们邀请了来自 Vogella GmbH 的 Simon Scholz 来帮助我们完成需要深入 Eclipse 知识的工作,这被证明是无价的。我们还专门安排了一位 Gradle 核心开发人员来负责 Buildship 的开发。接下来,我们将用我们自己的执行视图替换我们对 Eclipse 测试运行器的集成。该视图可视化运行构建时发生的情况,例如运行了哪些任务,执行了哪些测试等等。可视化是基于 Buildship 通过 工具 API 从 Gradle 收到的事件进行的。工具 API 是一个独立的 Gradle 库,它拥有自己的 API,允许 IDE 通过进程间通信与 Gradle 构建进行通信。工具 API 充当 Gradle 构建代理的架构具有许多优点,例如进程隔离、向后/向前兼容性和包含的构建逻辑。在 Buildship 的开发过程中,工具 API 添加了许多增强功能,例如事件广播、针对 Eclipse 的优化类路径依赖计算等等。

Buildship 与 Eclipse Mars 同时发布,并在 6 月份的 EclipseCon France 上发布

有了任务视图、执行视图、控制台、视图、运行配置和项目导入向导,我们已准备好成为 Eclipse Mars 的一部分。不幸的是,并非所有人都相信我们已准备好成为同步发布的一部分,因此在 2015 年 6 月,我们在与 Eclipse Mars 同一天发布了 Buildship,但尚未将其包含在 Eclipse Mars 中。Eclipse 基金会为此目的在 Eclipse 市场 中创建了一个新条目,其中托管了一些精选的插件。这允许所有用户直接从 Eclipse 中选择并安装 Buildship 插件。这是我们在 2015 年 6 月的 EclipseCon 法国会议上展示的状态。

Gradle 继续根据您的反馈投资 Buildship 功能

发布后,增强 Buildship 的工作继续进行,没有中断。我们专注于增强和完善现有功能,主要基于我们通过 Buildship 论坛 收到的反馈。该论坛被积极用于报告问题、请求新功能和提出问题。反复出现的一个主题是扩展导入功能,并允许用户显式刷新导入的项目。因此,我们在巩固和扩展导入项目、显式刷新项目和打开项目的逻辑方面投入了大量工作。我们还添加了一项新功能,允许用户通过执行视图和源代码编辑器从 Gradle 执行测试。这是我们将在 2015 年 11 月的 EclipseCon 欧洲会议上展示的状态。

社区跟踪并修复了一个神秘的错误

在 Eclipse Mars.1 发布之前,我们完成了增强工作,成为同步发布的一部分,被包含在三个重要的 Eclipse 发行版 (EPP) 中,Buildship 项目本身也从孵化阶段毕业成为一个完整的项目。由于在 Mars.1 发布的平静期内在 Buildship 中发现了一个错误,我们不得不提供一个新的 Buildship 版本,这将最终的 Mars.1 发布推迟了一周。该错误从 6 月就存在,但之前没有人将该错误的体现方式与 Buildship 是导致问题的插件联系起来。该错误的严重程度以及如何修复它的方法在 Eclipse 邮件列表中公开讨论和解决。

Buildship 在 Eclipse Mars.1 中发布

2015 年 10 月 2 日,Eclipse Mars.1 正式发布,Buildship 是该版本中最突出的新功能。在过去十个月中开发 Buildship 对所有参与者来说都非常有趣,因为它包括在 Gradle 核心、工具 API、Buildship 本身以及参与 eclipse.org 正式流程方面的工作。

更多内容即将推出

Buildship 的开发将继续。我们希望将更多关于 IDE 如何与 Gradle 集成的愿景付诸现实:可视化 Gradle 构建背后丰富模型的详细信息,支持 Web 应用程序的项目配置,调试测试和 Web 应用程序,代码辅助等等。

立即尝试

尝试 Buildship 最简单的方法是下载 Eclipse Mars for Java Developers,然后选择 文件 > 导入… > Gradle 项目 并指向现有的 Gradle Java 项目。如果您在使用 Buildship 时体验到“构建幸福”(或其他感觉),请告诉我们。

讨论