当前位置: 首页 > 科技观察

使用Gradle全面加速SpringBoot开发

时间:2023-03-15 11:44:44 科技观察

大家都知道Gradle和Maven一样,是一个项目构建工具。它通过任务控制开发过程,包括:编译、打包、测试、部署和发布。Gradle诞生于2008年,只比Maven晚了4年。Android还采用Gradle作为默认构建工具。本文希望通过以下描述,帮助您快速方便地使用Gradle加速您的SpringBoot开发应用。1.Gradle越来越受欢迎。从2012年开始,SpringFramework使用Gradle构建;从2020年开始,SpringBoot也已使用Gradle构建。官方给出的使用Gradle的主要原因仍然是“构建项目花费的时间更少”。(参考:Spring/SpringBoot编译工具从Maven迁移到Gradle)但是对于我们普通的应用开发者来说,Gradle对我们的好处是:代码更简洁,功能更丰富。(参考:Gradlevs.Maven,胜负已分?)最近的一些统计报告显示,越来越多的人在使用Gradle。OpenLogic发布的Stackoverflow趋势报告《2022年度开源报告》最近有个振奋人心的消息,Spring生成应用的官网:springinitializr(https://start.spring.io/)也将使用默认的构建工具从Maven切换到Gradle。基于以上,我觉得有必要了解一下快速易用的Gradle。2.了解SpringBoot工程结构打开:https://start.spring.io,生成一个demo工程,工程构建工具默认选择Gradle。点击“GENERATE”生成项目压缩包,解压压缩包,项目结构如下:Gradle相关:settings.gralde,gradlewrapper【gradle/wrapper目录,gradlew(gradlew.bat)】,build.gradle。下面我们一一了解。2.1settings.gradle这个文件配置了构建项目所需要的信息。SpringBoot项目中这个文件的内容很简单:rootProject.name='gradle-demo'这一项是配置编译文件的名称。2.2gradlewrapper通过使用gradlewrapper脚本,我们可以直接下载并配置gradle,无需外部安装配置gradle。这也为您当前的程序匹配最合适的Gradle版本。程序可以直接通过gradlewrapper脚本进行编译、打包、测试、部署和发布。Linux/MacOS的gradle包装器是gradlew;Windows的gradle包装器是gradlew.bat。2.3如何加速gradle下载gradlewrapper会自动下载gradle。如果默认下载gradle的地址很慢,可以换成阿里云或者腾讯云的地址。当然也可以是你公司内部的文件下载地址。我们在gradle/wrapper/gradle-wrapper.properties中配置distributionUrl类:/dists如果使用阿里云地址加速(列表页:https://mirrors.aliyun.com/macports/distfiles/gradle/):distributionUrl=https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.5.1-bin.zip如果使用腾讯云加速的地址,可以在页面找到:https://mirrors.cloud.tencent.com/gradle/。2.4build.gradlebuild.gradle相当于Maven的pom.xml,但是比Maven简洁多了。对于同一个项目,如果与Maven生成的代码进行比较:xml是一种非常清晰但冗长的表意语言。在Java生态中用的越来越少,在SpringBoot的开发中几乎没有涉及到xml的东西。从图中的对比也可以看出Gradle比Maven的可读性更好,也更容易维护!build.gradle的核心内容包括:插件(plug-ins)、库(repositories)、依赖(dependencies)、任务(tasks)。因为build.gradle是本文的核心内容之一,所以我们会用一个大标题来说明build.gradle。3、build.gradle生成的build.gradle文件内容如下:plugins{id'org.springframework.boot'version'2.7.5'id'io.spring.dependency-management'version'1.0.15.RELEASE'id'java'}group='top.wisely'version='0.0.1-SNAPSHOT'sourceCompatibility='17'configurations{compileOnly{extendsFromannotationProcessor}}repositories{maven{url'https://maven.aliyun.com/repository/public/'}maven{url'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/'}mavenCentral()}dependencies{implementation'org.springframework.boot:spring-boot-starter-web'testImplementation'org.springframework.boot:spring-boot-starter-test'}tasks.named('test'){useJUnitPlatform()}下面对重点内容进行说明。3.1plugins(插件)build.gradle声明了插件的依赖关系。核心插件只需要使用短id,社区插件需要使用id的全称。plugins{id'org.springframework.boot'version'2.7.5'id'io.spring.dependency-management'version'1.0.15.RELEASE'id'java'}社区插件:SpringBootGradle插件,它为我们提供提供运行SpringBoot和创建可执行jar包或war包的能力,我们下节重点介绍:id'org.springframework.boot'version'2.7.5'社区插件:SpringBoot依赖管理插件-in,它为我们提供了项目直接或间接依赖的库的版本控制。这些版本是SpringBoot测试过兼容性的版本:id'io.spring.dependency-management'version'1.0.15.RELEASE'corePlug-ins:Java插件,为项目添加Java编译、测试等功能.id'java'3.2repositories(library)Gradle默认使用Maven中央库下载依赖包:repositories{mavenCentral()}如果从中央库下载jar包速度慢,我们可以使用阿里巴巴的Maven库镜像云端或者腾讯云下载加速,当然你也可以使用你公司内部的Maven库私服加速。存储库{maven{url'https://maven.aliyun.com/repository/public/'}maven{url'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/'}mavenCentral()}3.3依赖(dependency)普通依赖:implementation我们只需要按照如下格式引入依赖:implementationgroup:'***',name:'***',version:'***'或者简写为:implementation'group:name:version'因为插件的原因,只要是SpringBoot管理的依赖,就不需要维护版本。它可以写得更简洁:implementation'group:name'通常看起来像:dependencies{implementation'org.springframework.boot:spring-boot-starter-web'//...}我们大部分时间都是用gradle做依赖相关的工作,了解了这些就可以解决了。我们可以通过:https://mvnrepository.com网站找到并添加依赖,我们在dependencies中选择Gradle(简称)将内容复制到我们的依赖中。一般情况下,我们会去掉复制的版本号,以防SpringBoot已经为它做了版本管理,这样我们就可以直接下载兼容性好的依赖包;如果删除版本后无法下载依赖包,说明由于SpringBoot没有对包的版本进行管理,我们根据自己的需要添加合适的版本号。让我们来看看其他几个依赖关键字。一般来说,我们不需要太在意。测试依赖:testImplementation测试相关依赖,使用testImplementation,规则与普通依赖一致。dependencies{//...testImplementation'org.springframework.boot:spring-boot-starter-test'}编译依赖:compileOnly只在编译期间起作用的依赖。dependencies{//...compileOnly'org.projectlombok:lombok'//...}runtimedependencies:runtimeOnly只在运行时起作用的依赖。dependencies{//...runtimeOnly'com.mysql:mysql-connector-j'//...}4.SpringBootGradlePlugin可以让SpringBoot各种能力运行,主要依赖SpringBootGradle插件。SpringBootGradle插件中包含了大量的任务(tasks),我们可以使用gradlew查看他提供的所有任务(tasks)。项目任务列表:使用以下任务查询当前项目的任务列表。其中大部分任务由SpringBootGradle插件提供。./gradlewtasks查询具体任务信息help./gradlewhelp--taskbootRun添加简单demo代码@SpringBootApplication@RestControllerpublicclassGradleDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(GradleDemoApplication.class,args);}@RequestMapping("/")publicStringhello(){return"hellogradle!!!";}}运行SpringBoot程序的任务:bootRun./gradlewbootRun访问:http://localhost:8080/编译可执行jar包任务:build/bootJar./gradlewbootJar会在build/libs目录下生成可执行jar包.jar包名称为gradle-demo-0.0.1-SNAPSHOT.jar,jar包名称为上面settings.gradle中设置的名称。清理构建任务:clean./gradlewclean执行测试任务:test./gradlewtest5、IntellijIDEA和Gradle:如虎添翼5.1创建Gradle的SpringBoot项目IntellijIDEA支持新的SpringInitializr项目,注意选择Gradle作为构建工具。5.2可以直接打开基于Gradle的SpringBoot工程。可以直接在File->Open中选择基于Gradle的SpringBoot项目,导入IntellijIDEA后,会自动下载相关依赖。这是导入的项目导入IntellijIDEA的样子。5.3在Gradle工具窗口中执行任务在上图中,我们看到右侧的Gradle选项卡,点击可以看到Gradle工具窗口,窗口中有一个任务列表。在任务列表中,我们选择一个任务如bootJar,双击运行:5.4加载build.gradle变化手动加载:可以点击Gradle工具窗口的刷新按钮或者build.gradle文件上的刷新按钮来实现手动加载。Automaticloading:选择AnychangesinReloadprojectafterchangesinthebuildscriptsintheBuildToolset。5.5快速搜索并添加依赖在build.gradle页面,MacOS下command+N,Windows下Alt+Insert。adddepedency可以调用出来。点击Adddependency后,我们会多出一个dependencyretrievalview,在这里我们可以检索和添加dependencies:5.6build.gradle脚本自动补全5.7在Gradle工具窗口查看项目依赖6.结束语通过本文的讲解,下一般情况下可以满足你在项目开发中的大部分需求。给大家的最后一句话:“我不明白为什么人们害怕新思想。我害怕旧思想。”——约翰凯奇“我不明白为什么人们害怕新想法。我害怕那些旧想法。””-约翰·凯奇。感谢您支持我的书《从企业级开发到云原生微服务:Spring Boot实战》。参考:https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/https://gustavopeiretti.com/spring-boot-with-gradle-wrapper/https://tomgregory.com/10-tips-to-use-gradle-with-intellij-idea/