0. 前言
相比起 Maven 的 XML 配置方式,Gradle 提供了一套简明的 DSL 用于构建Java 项目,使我们就像编写程序一样编写项目构建脚本。
本文将从无到有创建一个用 Gradle 构建的多模块 Spring Boot 项目,JDK 版本为8,IDEA 版本为 2022.3.1 。
1. 创建项目
打开IDEA,选择菜单:File -> New -> Project,在其中找到 Spring Initializr,创建一个全新的 demo 项目,创建成功后结构如下:

之后,程序会自动下载 Gradle 安装包,并且通过 Gradle 下载和引入的 jar 包。由于默认使用的镜像速度较慢,我们可以先取消下载,等后面配置好国内镜像后再重新下载,当然也可以慢慢等。
2. Gradle说明
在这里就不介绍Gradle 的优缺点了,只说一下本项目涉及的部分:
- build.gradle :管理依赖包的配置文件(相当于Maven的pom.xml)。
- gradlew :Gradle 命令的包装,当机器上没有安装 Gradle 时,可以直接用 gradlew 命令来构建项目。
- settings.gradle :可以视为多模块项目的总目录, Gradle 通过它来构建各个模块,并组织模块间的关系。
- gradle/wrapper包 :Gradle 的一层包装,能够让机器在不安装 Gradle 的情况下运行程序,便于在团队开发过程中统一 Gradle 构建的版本, 推荐使用 。
- gradle.properties :需手动创建,配置gradle环境变量,或配置自定义变量供 build.gradle 使用。
3. Gradle最佳实践
接下来,讲一下我个人使用 Gradle 的一些经验。
- 修改 gradle-wrapper.properties 中的 Gradle 下载镜像改为国内镜像。

- 新建 gradle.properties 文件,配置 Gradle 参数,提升构建速度。

- 将 maven 仓库地址改为国内地址
- 将经常变更的依赖包版本、 maven 库地址等变量提取到 gradle.properties 里, build.gradle 可直接读取使用。

- 使用 buildscript 方式引用 gradle plugins ,优点是可以使用自定义仓库,且便于子模块继承。

- 新建 spring.gradle 配置文件,引用相关的 Spring 依赖包。

- 在 build.gradle 里添加引用本地jar包的语句,这样配置后,仓库中没有的jar包,放到 src/libs 文件夹下就可以直接使用了,非常方便。


- 在 build.gradle 中添加一个拷贝 jar 包的 task ,在 build 或 bootJar 后执行,用于将子模块打包后,拷贝到根目录下。

4. 项目模块划分
4.1. 拆分思路
新项目默认是一个单模块的 SpringBoot 工程,而我们要将其改造为一个多模块项目,思路是,将项目拆分为多个子模块,分为三类: 服务、模块、组件 :
- 项目 :最顶级,与服务是一对多的关系,本项目为根目录;
- 服务 :对应一个可启动的 SpringBoot 工程,一般只有一个启动类,建议根据服务器资源和团队规模划分,与模块是一对多的关系,位置在 services 包下;
- 模块 :对应一个完整的业务,模块间边界清晰,将不同的业务解耦,便于扩展和维护,位置在 modules 包下;
- 组件 :将公用的代码部分提取为一个个组件,供不同的模块调用,与模块是多对多的关系,位置在 components 包下。
4.2. 拆分实践
- 服务 :创建一个示例服务:demo-boot
- 模块 :只是个框架,没有承载业务,象征性的建一个系统管理模块:demo-system ,任何系统都能用到;
- 组件 :建一个放工具类的组件:demo-common ,所有模块都会用到。
4.3. 具体配置
- 声明子模块 :在根目录下的 settings.gradle 里声明各个模块:

- 服务公共依赖 :在 services/build.gradle 里引用一些所有服务公用的一些依赖包,这里使用了 subprojects,表示应用于所有 services 包下的子模块,我们通过 sourceSet 的方式将根目录 src 下的文件,作为公共代码集成到每个服务中。

- 服务包含模块 :在 services/demo-boot/build.gradle 里引用模块 demo-system

- 模块公共依赖 :在 modules/build.gradle 里引用一些所有模块公用的一些依赖包,这里我们引用本地 src/libs 文件夹下的本地jar包。

- 模块包含组件 :在 modules/demo-system/build.gradle 里引用组件 demo-common

4.4. 代码结构
每次修改 Gradle 配置后,需要刷新生效(可改为自动)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
模块
+关注
关注
7文章
2848浏览量
53432 -
JAVA
+关注
关注
20文章
3005浏览量
116818 -
程序
+关注
关注
117文章
3847浏览量
85453 -
spring
+关注
关注
0文章
341浏览量
16046 -
gradle
+关注
关注
0文章
26浏览量
1070
发布评论请先 登录
相关推荐
热点推荐
Spring Boot如何实现异步任务
Spring Boot 提供了多种方式来实现异步任务,这里介绍三种主要实现方式。 1、基于注解 @Async @Async 注解是 Spring 提供的一种轻量级异步方法实现方式,它可以标记在方法上
Spring Boot Starter需要些什么
pulsar-spring-boot-starter是非常有必要的,在此之前,我们先看看一个starter需要些什么。 Spring Boot Starter spring-boot的
启动Spring Boot项目应用的三种方法
的读取,开启注解4)配置日志文件...配置完成之后部署tomcat 调试。但是如果使用spring boot呢?很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目或者是
发表于 01-14 17:33
Spring Boot从零入门1 详述
在开始学习Spring Boot之前,我之前从未接触过Spring相关的项目,Java基础还是几年前自学的,现在估计也忘得差不多了吧,写Spring
Spring Boot特有的实践
Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验
强大的Spring Boot 3.0要来了
和 Bugfix。 Spring Boot 3.0 的开发工作始于实验性的 Spring Native,旨在为 GraalVM 原生镜像提供支持。 在该版本中,开发者现在可以使用标准 Spri
怎样使用Kiuwan保护Spring Boot应用程序呢?
Spring Boot 提供了快速轻松地构建基于Spring 的应用程序所需的工具、功能和依赖项。
Spring Boot Web相关的基础知识
上一篇文章我们已经学会了如何通过IDEA快速建立一个Spring Boot项目,还介绍了Spring Boot
Spring Boot Actuator快速入门
不知道大家在写 Spring Boot 项目的过程中,使用过 Spring Boot Actuator 吗?知道
Spring Boot启动 Eureka流程
在上篇中已经说过了 Eureka-Server 本质上是一个 web 应用的项目,今天就来看看 Spring Boot 是怎么启动 Eureka 的。 Spring
Spring Boot的启动原理
可能很多初学者会比较困惑,Spring Boot 是如何做到将应用代码和所有的依赖打包成一个独立的 Jar 包,因为传统的 Java 项目打包成 Jar 包之后,需要通过 -classpath 属性
Gradle构建的多模块Spring Boot项目
评论