Buildship:从概念到纳入 Eclipse
目录
简介
在 Gradle,我们认为保持开发者“心流状态”对于构建优秀的软件至关重要。因为我们相信心流至关重要,所以我们认为开发者不应该为了构建而离开 IDE,并且他们不应该知道 IDE 正在执行哪些功能,以及哪些功能被委托给构建系统。我们的愿景是,所有构建逻辑都完全保留在构建系统中,因此,计算项目配置、构建项目、运行测试和运行可执行文件的所有工作都从 IDE 委托给构建系统。因此,IDE 映射构建的项目,可视化构建模型,并显示执行构建的进度。
为了实现我们理想的 IDE Gradle 交互愿景,我们决心构建并提供我们自己的参考实现,以指导其他 IDE 的实现者。因此,在 2014 年秋季,Gradle 公司决定提供自己的 Eclipse Gradle 插件,以便为用户在使用 Eclipse 中的 Gradle 时提供最佳体验。
Buildship 受邀加入 Eclipse Mars 发布列车 #
在我们开始实施后不久,Eclipse 基金会 询问我们是否愿意贡献一个 Eclipse Gradle 插件,并使该插件成为 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 在三月份的北美 EclipseCon 首次亮相 #
一旦 Gradle 构建建立,并在其之上设置了 持续集成管道,我们就能够开始专注于 Gradle 的 Eclipse 插件的内容。我们从任务视图开始,着手项目导入,添加了运行配置和控制台视图,然后集成到现有的 Eclipse 测试运行器中。这就是我们在 2015 年 3 月的北美 EclipseCon 上展示的状态。
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 在六月份的法国 EclipseCon 与 Eclipse Mars 同步发布 #
随着任务视图、执行视图、控制台视图、运行配置和项目导入向导的就位,我们准备成为 Eclipse Mars 的一部分。不幸的是,并非所有人都相信我们已准备好成为同步发布的一部分,因此在 2015 年 6 月,我们在与 Eclipse Mars 同一天发布了 Buildship,但尚未在 Eclipse Mars 中发布。Eclipse 基金会在 Eclipse Marketplace 中为此目的创建了一个新条目,其中托管了少数精选插件。这允许所有用户直接从 Eclipse 中选择和安装 Buildship 插件。这就是我们在 2015 年 6 月的法国 EclipseCon 上展示的状态。
Gradle 基于您的反馈持续投资 Buildship 特性 #
发布后,增强 Buildship 的工作仍在继续,没有中断。我们专注于增强和完善现有功能,主要基于我们通过 Buildship 论坛 收到的反馈。该论坛被积极用于报告问题、请求新功能和提问。反复出现的一个主题是扩展导入功能,并允许用户显式刷新导入的项目。因此,我们投入了大量工作来巩固和同时扩展导入项目、显式刷新项目和打开项目的逻辑。我们还添加了一项新功能,允许用户通过 Gradle 从执行视图和源代码编辑器执行测试。这就是我们将在 2015 年 11 月的欧洲 EclipseCon 上展示的状态。
社区跟踪并修复了一个神秘的 Bug #
在 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 核心、Tooling API、Buildship 本身以及参与 eclipse.org 正式流程方面的工作。
更多精彩,敬请期待 #
Buildship 的工作将继续进行。我们希望将我们关于 IDE 应如何与 Gradle 集成的愿景更多地变为现实:可视化 Gradle 构建背后丰富模型的详细信息、支持 Web 应用程序的项目配置、调试测试和 Web 应用程序、代码辅助等等。
立即试用 #
试用 Buildship 最简单的方法是下载适用于 Java 开发人员的 Eclipse Mars,然后选择 文件 > 导入… > Gradle 项目
并指向现有的 Gradle Java 项目。如果您在使用 Buildship 时体验到构建幸福感(或其他一些感觉),请告诉我们。