0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Gradle构建的多模块Spring Boot项目

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-09-25 14:46 次阅读

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 的一些经验。

  1. 修改 gradle-wrapper.properties 中的 Gradle 下载镜像改为国内镜像。

图片

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

图片

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

图片

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

图片

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

图片

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

图片图片

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

图片

4. 项目模块划分

4.1. 拆分思路

新项目默认是一个单模块的 SpringBoot 工程,而我们要将其改造为一个多模块项目,思路是,将项目拆分为多个子模块,分为三类: 服务、模块、组件

  1. 项目 :最顶级,与服务是一对多的关系,本项目为根目录;
  2. 服务 :对应一个可启动的 SpringBoot 工程,一般只有一个启动类,建议根据服务器资源和团队规模划分,与模块是一对多的关系,位置在 services 包下;
  3. 模块 :对应一个完整的业务,模块间边界清晰,将不同的业务解耦,便于扩展和维护,位置在 modules 包下;
  4. 组件 :将公用的代码部分提取为一个个组件,供不同的模块调用,与模块是多对多的关系,位置在 components 包下。

4.2. 拆分实践

  1. 服务 :创建一个示例服务:demo-boot
  2. 模块 :只是个框架,没有承载业务,象征性的建一个系统管理模块:demo-system ,任何系统都能用到;
  3. 组件 :建一个放工具类的组件:demo-common ,所有模块都会用到。

4.3. 具体配置

  1. 声明子模块 :在根目录下的 settings.gradle 里声明各个模块:

图片

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

图片

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

图片

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

图片

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

图片

4.4. 代码结构

每次修改 Gradle 配置后,需要刷新生效(可改为自动)

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2661

    浏览量

    47312
  • JAVA
    +关注

    关注

    19

    文章

    2954

    浏览量

    104510
  • 程序
    +关注

    关注

    116

    文章

    3769

    浏览量

    80805
  • spring
    +关注

    关注

    0

    文章

    338

    浏览量

    14299
  • gradle
    +关注

    关注

    0

    文章

    26

    浏览量

    695
收藏 人收藏

    评论

    相关推荐

    Spring Boot中Docker的入门指南(一)

    许多人使用容器来包装他们的 Spring Boot 应用程序,而构建容器并不是一件简单的事情。这是针对 Spring Boot 应用程序开发
    的头像 发表于 06-28 15:54 2642次阅读

    Spring Boot如何实现异步任务

    Spring Boot 提供了多种方式来实现异步任务,这里介绍三种主要实现方式。 1、基于注解 @Async @Async 注解是 Spring 提供的一种轻量级异步方法实现方式,它可以标记在方法上
    的头像 发表于 09-30 10:32 1391次阅读

    Spring Boot Starter需要些什么

    pulsar-spring-boot-starter是非常有必要的,在此之前,我们先看看一个starter需要些什么。 Spring Boot Starter spring-boot
    的头像 发表于 09-25 11:35 724次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> Starter需要些什么

    启动Spring Boot项目应用的三种方法

    的读取,开启注解4)配置日志文件...配置完成之后部署tomcat 调试。但是如果使用spring boot呢?很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目或者是
    发表于 01-14 17:33

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目标是构建“非常容易创建、独立、产品级别的基于
    发表于 12-16 07:57

    Spring Boot从零入门1 详述

    在开始学习Spring Boot之前,我之前从未接触过Spring相关的项目,Java基础还是几年前自学的,现在估计也忘得差不多了吧,写Spring
    的头像 发表于 12-10 22:18 599次阅读

    Spring认证」什么是Spring GraphQL?

    这个项目建立在 Boot 2.x 上,但它应该与最新的 Boot2.4.x5 相关。 要创建项目,请转到start.spring.io并为要
    的头像 发表于 08-10 14:08 792次阅读
    「<b class='flag-5'>Spring</b>认证」什么是<b class='flag-5'>Spring</b> GraphQL?

    Spring Boot特有的实践

    Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验
    的头像 发表于 09-29 10:24 867次阅读

    强大的Spring Boot 3.0要来了

    和 Bugfix。 Spring Boot 3.0 的开发工作始于实验性的 Spring Native,旨在为 GraalVM 原生镜像提供支持。 在该版本中,开发者现在可以使用标准 Spri
    的头像 发表于 10-31 11:17 1681次阅读

    怎样使用Kiuwan保护Spring Boot应用程序呢?

    Spring Boot 提供了快速轻松地构建基于Spring 的应用程序所需的工具、功能和依赖项。
    的头像 发表于 03-16 09:10 752次阅读

    Spring Boot Web相关的基础知识

    上一篇文章我们已经学会了如何通过IDEA快速建立一个Spring Boot项目,还介绍了Spring Boot
    的头像 发表于 03-17 15:03 618次阅读

    Spring Boot Actuator快速入门

    不知道大家在写 Spring Boot 项目的过程中,使用过 Spring Boot Actuator 吗?知道
    的头像 发表于 10-09 17:11 601次阅读

    Spring Boot启动 Eureka流程

    在上篇中已经说过了 Eureka-Server 本质上是一个 web 应用的项目,今天就来看看 Spring Boot 是怎么启动 Eureka 的。 Spring
    的头像 发表于 10-10 11:40 844次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>启动 Eureka流程

    Spring Boot的启动原理

    可能很多初学者会比较困惑,Spring Boot 是如何做到将应用代码和所有的依赖打包成一个独立的 Jar 包,因为传统的 Java 项目打包成 Jar 包之后,需要通过 -classpath 属性
    的头像 发表于 10-13 11:44 612次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的启动原理

    Spring Boot 的设计目标

    什么是Spring Boot Spring BootSpring 开源组织下的一个子项目
    的头像 发表于 10-13 14:56 547次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的设计目标