Buildship:从诞生到纳入 Eclipse
目录
引言
在 Gradle,我们坚信保持开发者的“心流状态”对于构建优质软件至关重要。正因如此,我们认为开发者不应该为了构建而离开 IDE,也不应该需要区分 IDE 执行了哪些功能,哪些是委托给构建系统的。我们的愿景是所有构建逻辑都只保留在构建系统中,因此从 IDE 到构建系统,所有项目配置计算、项目构建、测试运行和可执行文件运行的工作都委托给构建系统。因此,IDE 负责映射构建项目,可视化构建模型,并显示构建执行的进度。
为了实现我们理想的 IDE Gradle 交互愿景,我们决定构建并提供我们自己的参考实现,以指导其他 IDE 的实现者。因此,在 2014 年秋季,Gradle Inc. 决定提供自己的 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(在 Eclipse 插件项目中仍然无处不在)获得相同的 简洁性和表达力。
Buildship 于三月在 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 通过 Tooling API 从 Gradle 接收到的事件。Tooling API 是一个独立、独立的 Gradle 库,拥有自己的 API,允许 IDE 通过进程间通信与 Gradle 构建进行通信。Tooling API 作为 Gradle 构建代理的架构带来了许多优势,例如进程隔离、向前/向后兼容性和受控的构建逻辑。在 Buildship 的开发过程中,Tooling API 得到了许多增强,例如事件广播、对 Eclipse 的优化类路径依赖计算等等。
Buildship 与 Eclipse Mars 同期在六月法国 EclipseCon 发布 #
随着任务视图、执行视图、控制台视图、运行配置和项目导入向导的到位,我们已经准备好成为 Eclipse Mars 的一部分。不幸的是,并非所有人都确信我们已准备好加入同步发布,因此在 2015 年 6 月,我们与 Eclipse Mars 同一天发布了 Buildship,但当时还未纳入 Eclipse Mars。Eclipse 基金会为此在 Eclipse 市场创建了一个新的入口,并托管了少数精选的插件。这使得所有用户都可以直接从 Eclipse 中选择并安装 Buildship 插件。这就是我们在 2015 年 6 月的法国 EclipseCon 上展示的状态。
Gradle 根据您的反馈继续投入 Buildship 功能的开发 #
发布后,Enhance Buildship 的工作仍在不间断地继续。我们专注于增强和打磨现有功能,主要基于我们通过 Buildship 论坛收到的反馈。论坛被积极用于报告问题、请求新功能和提问。一个反复出现的主题是扩展导入功能,并允许用户显式刷新导入的项目。因此,我们在巩固和扩展导入项目、显式刷新项目以及打开项目的逻辑方面投入了大量工作。我们还添加了一项新功能,允许用户通过 Gradle 从执行视图和源编辑器执行测试。这就是我们将在 2015 年 11 月的欧洲 EclipseCon 上展示的状态。
社区追踪并修复了一个神秘的 bug #
在 Eclipse Mars.1 发布前,我们完成了增强,成为了同步发布的一部分,并被纳入了三个重要的 Eclipse 发行版(EPPs),Buildship 项目本身也从孵化阶段毕业,成为一个正式项目。由于在 Mars.1 发布期间发现了一个 Buildship 的 bug,我们不得不提供一个新版本,导致最终的 Mars.1 发布延迟了一周。这个 bug 已经存在了很久,但在此之前没有人将 bug 的表现方式与 Buildship 成为问题根源联系起来。bug 的严重性以及如何修复它在 Eclipse 邮件列表中得到了公开的讨论和解决。
Buildship 在 Eclipse Mars.1 中发布 #
2015 年 10 月 2 日,Eclipse Mars.1 正式发布,Buildship 是此次发布中最突出的新功能。在过去的十个月里,开发 Buildship 对所有参与者来说都非常有趣,因为它包含了 Gradle 核心、Tooling API、Buildship 本身的工作,以及参与 eclipse.org 的正式流程。
未来还有更多 #
Buildship 的工作将继续。我们希望将我们关于 IDE 应如何与 Gradle 集成的更多愿景变为现实:可视化 Gradle 构建背后丰富模型的详细信息、支持 Web 应用程序的项目配置、调试测试和 Web 应用程序、代码辅助等等。
立即体验 #
体验 Buildship 的最简单方法是下载适用于 Java 开发人员的 Eclipse Mars,然后选择 File > Import… > Gradle Project
并指向一个现有的 Gradle Java 项目。如果您在使用 Buildship 时体验到“构建幸福感”(或其他任何感觉),请告诉我们。