IntelliJ IDEA流行的构建工具——Gradle

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。

如今构建工具是一切项目的重要组成部分,而IntelliJ IDEA已与大多数构建工具集成,目前流行的构建工具是Gradle。在本文中,我们简要介绍一下它与IntelliJ IDEA的集成历史以及IDE内实现的委托流程。

IntelliJ IDEA v2023.1正式版下载

起点

IntelliJ IDEA 的上市时间比其他构建工具都要早,多年来一直提供其原生构建系统并取得了巨大成功。 IntelliJ IDEA 构建系统始终是编译、运行测试和打包到 JAR 等任务的最佳选择。

开发者通常主要关注编译和运行测试,因此构建流程的快速反馈周期至关重要,而我们则擅长执行 JUnit 和 TestNG 测试以及增量编译。

Gradle之前

Maven 推出时表现出强大的项目依赖项管理能力,我们利用了它的项目结构,并将下载和解析依赖项委托给 Maven(但将构建流程留给 IntelliJ IDEA)。

我们能够在 IntelliJ IDEA 构建系统中复制 Maven 的构建流程,基于 Maven 项目模型,IntelliJ IDEA 可以用最少的额外步骤构建项目。同时我们开发了有效检索资源处理信息的机制,覆盖从 pom.xml 生成 MANIFEST.mf 文件,进一步增强了构建流程。

然后,我们将构建流程的结果应用到执行测试的原生流程。

借助这项改进,我们得以涵盖使用IntelliJ IDEA成功构建Maven项目的所有必要场景。

继续对Maven项目使用这种设置:从Maven检索必要信息,使用原生IntelliJ IDEA机制构建和启动项目,甚至对Spring Boot和 Micronaut等流行工具也是如此。

集成Gradle

当Gradle在市场上推出时,它让用户能够更好地自定义构建流程并为其添加更多功能。

当时决定开始采用与Maven类似的方式时,这意味着让 Gradle 处理依赖项和检索必要信息,而 IntelliJ IDEA 将编译代码、运行测试和构建项目。

不过Gradle项目模型似乎有些过于灵活,您可以在构建脚本中使用不同的源集或语言,例如Groovy、Scala或Kotlin。 另外,在构建脚本中还可以编写命令式代码,为构建系统提供所需行为和设置的直接指令。

例如可以在运行之前或测试运行之前启动数据库,另外与包含静态配置的Maven相比,Gradle构建脚本允许在资源处理期间执行任意代码,使用IntelliJ IDEA 功能很难重现此类配置。

显然在标准操作方面表现出色,但自定义操作,例如处理资源和其他自定义任务,对我们来说相当难以控制和维护,最重要的是难以在 IntelliJ IDEA 构建系统中复制。

因此,我们决定将测试运行委托给 Gradle:

当您运行测试时,Gradle test任务将与属于Gradle构建周期的其他任务一起执行,如下所示:

此外IntelliJ IDEA 还提供了额外功能,举例来说,您需要运行的测试可能分布在不同源集中。 集成测试在一个源集中,而功能测试则在另一个源集中。

IntelliJ IDEA 能够正确确定特定测试文件的测试任务及其位置,确保相关测试有效执行。

此外IntelliJ IDEA还提供测试执行级别的信息 -- 方法、类或软件包,例如Gradle 默认执行源集中的所有测试。

但是IntelliJ IDEA会应用筛选模式,并在 Run(运行)工具窗口中显示消息,告知您执行测试的确切位置:

总体而言,Gradle 的测试委托相当成功。

下一步自然是将 Build(构建)和 Run(运行)操作也委托给 Gradle,最终委托成为默认选择。

现在,在应用程序中使用 Run(运行)操作时,它会在 Gradle 上下文中使用并动态完成。

类似于现有 Gradle 应用程序插件,我们正在创建运行主类的 JavaExec 类型的任务,这可以确保应用程序运行配置的最大正确性。

在委托模式下触发 Build(构建)时,IntelliJ IDEA 会根据项目中被修改的模块在 Gradle 中生成需要执行的命令列表,您可以在BuildOutput中查看此信息:

IntelliJ IDEA 还可以检测在不同模块中修改的文件并仅构建修改的部分。

目前,有两种委托模式可供选择:Gradle 和 IntelliJ IDEA。

  • Gradle :当流程委托给 Gradle 时,它比我们的原生构建系统稍慢,并且存在少量开销。 有时,在委托模式下,Gradle 守护进程需要重新运行。
    此外,Gradle 会保留其生命周期进程,重新运行 Gradle 模型并检查构建脚本及其文件系统,即使存在由 IntelliJ IDEA 编译的代码。
  • IntelliJ IDEA:如果 Gradle 项目中没有复杂的设置,可以使用 IntelliJ IDEA 加快构建流程。

还要注意在编译流程中支持注解处理,不过当代码由IntelliJ IDEA 编译时,有一些边缘情况很难处理,例如注解处理程序在 Gradle 子项目中定义的情况。

这就是我们现在所处的阶段,仍在尝试以委托模式运行Spring和Micronaut运行配置,并在IDE中持续改进Gradle委托流程。

相关推荐
Lionel_SSL1 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛1 小时前
手搓Springboot
java·spring boot·spring
老华带你飞1 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
独行soc1 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
脑子慢且灵2 小时前
[JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
java·后端·servlet·tomcat·intellij-idea·web
华仔啊3 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端
异常驯兽师4 小时前
Spring 中处理 HTTP 请求参数注解全解析
java·spring·http
AI视觉网奇4 小时前
android studio 断点无效
android·ide·android studio
jiaxi的天空4 小时前
android studio gradle 访问不了
android·ide·android studio
连合机器人4 小时前
晨曦中的守望者:当科技为景区赋予温度
java·前端·科技