近年来,Gradle 凭借其允许用户灵活地配置构建流程及强大的可拓展性,已经成为了最流行的 Java 构建工具之一。在 VS Code 中,用户也可以将 Gradle 项目导入工作空间进行开发。然而目前对于 Gradle 项目的支持,还有一些不尽如人意的地方,其中被用户吐槽最多的问题有两点:
- 编译后的文件会输出到 bin 目录中,这和 Gradle 项目默认的输出位置不同。
- 对于代码生成的支持,例如 Annotation Processing 支持不佳。
为了试图解决上述问题,微软和Gradle Enterprise联手合作,探索一种全新的 Gradle 项目导入及构建方式 — 基于构建服务协议(Build Server Protocol)实现面向 Gradle 的构建服务:Gradle 构建服务会将构建任务委托给 Gradle 构建工具,由 Gradle 构建工具直接负责代码的编译及生成,这样用户在 VS Code 进行构建的结果将和通过 Gradle 命令行执行构建的输出结果一致,从而在根本上解决上述两大问题。
什么是构建服务协议(BSP)
构建服务协议,即 Build Server Protocol(以下简称 BSP)。这个名字听上去和另一个协议:语言服务协议(Language Server Protocol,以下简称 LSP)很像。LSP 诞生的目的,是希望能够在开发工具和开发语言之间形成一层抽象层。在有了这层抽象的前提下,不同开发工具如果要支持某一编程语言,可以不必各自去实现诸如代码分析这样复杂的功能,而只需要正确地响应 LSP 所规定的事件即可。更多关于 LSP 的介绍,可以查看 LSP 的官方网站,这里就不再展开了。
BSP 受 LSP 的启发,希望在开发工具和构建工具之间形成一层抽象层,提供一种统一地信息交换方式。同时 BSP 也是对 LSP 的一个很好的补充,LSP 关注于代码分析相关的功能,例如代码补全,代码导航等。而 BSP 则关注于代码的构建,运行及测试。两者相结合,形成了一个代码开发的闭环。
目前 BSP 协议在 Scala 开发生态圈中已经有了比较广泛的应用,读者可以在其官方网站上看到目前已知的基于 BSP 的项目。
为什么选择 Gradle
除了可以解决文章开头提到的目前 VS Code Java 对 Gradle 项目支持存在的问题之外。Gradle 丰富的 Tooling API 也是驱使我们优先选择实现一个面向 Gradle 的构建服务的原因之一。目前来看,BSP 中所涉及到的几乎绝大部分请求,都可以通过 Gradle Tooling API 实现。
关于我们目前实现的 Gradle 构建服务具体的设计思路和细节,将会在后续的文章进行分享,请大家持续关注!
如何试用
如果您想要在 VS Code 中尝试一下基于 Gradle 构建服务的全新的 Gradle 项目开发体验,可参考下列步骤:
第一步 – 安装 Extension Pack for Java 插件。
第二步 – 安装 Gradle for Java 插件。
第三步 – 在 VS Code 中打开 Gradle 项目即可。如果该项目曾经已经在 VS Code 中打开过,请打开命令面板(F1),执行命令 Java: Clean Java Language Server Workspace > Reload and delete。
目前 Gradle 构建服务暂时不支持 Android 项目。Gradle 构建服务在启动后,会在 VS Code Output Channel 中输出服务运行的状态信息。如果在项目加载后,没有在 Output Channel 中看到任何输出,请重新尝试执行命令 Java: Clean Java Language Server Workspace > Reload and delete。
第四步 – 检查Gradle构建服务器状态输出
未来计划
我们在未来会持续维护并增强 Build Server for Gradle 项目。除了修复 Bugs 提升正确率和稳定性之外,我们还计划将运行(Run)和测试(Test)也委托给 Gradle 执行。这样一来,即使用户在 Gradle 脚本中为测试或者运行任务自定义了复杂的构建流程,也可以直接交给 Gradle ,无需在开发工具中进行额外的配置,做到开箱即用的体验。
如果您在试用过程中遇到任何问题,建议或者有想要实现的功能,欢迎通过发布 GitHub Issue 的方式告诉我们。
安装 Java 插件包
要使用上述所有功能,请在 Visual Studio Code 上下载并安装Extension Pack for Java 。
如果您是一位Spring开发者,并且正在编写Spring Boot相关的程序,您也可以下载并安装Spring Boot插件包,获得与Spring Boot有关的专属开发体验
0 comments