Gradle8.4构建SpringBoot多模块项目

一、基本

1、版本

  • 这个版本是Jdk8最后一个SpringBoot版本
软件 版本
Gradle 8.4
SpringBoot 2.7.15
JDK 8

2、Gradle基本介绍

2.1、使用Wrapper方式构建

  • 好处:统一gradle的版本
  • 好处:不用安装gradle就可以使用
  • Maven也是一样的可以用Wrapper的方式

2.2、导包方式

  • 列举常用的四种
implementation
api
compileOnly
compileOnlyApi

①、implementation

  • 导入依赖,不传递给子模块,依赖项将被编译和打包到项目中

②、api

  • 导入依赖,传递给子模块,依赖项将被编译和打包到项目中

③、implementation和api的区别

④、compileOnly

  • 导入依赖,不传递给子模块,依赖项将被编译到项目中,不打包到项目

⑤、compileOnlyApi

  • 导入依赖,传递给子模块,依赖项将被编译到项目中,不打包到项目

2.3、build.gradle配置文件

  • 相当于Maven的pom文件,主要是配置模块,导入依赖的作用

①、allprojects

  • 里面的配置,所有模块生效
  • 一般配置包的信息、编码、仓库地址
allprojects {

}

②、subprojects

  • 里面的配置,只有自己和子模块生效
  • 一般配置插件、统一包的版本管理、打包方式等等
subprojects {

}

③、dependencies

  • 导入依赖,相当于Maven的<dependency></dependency> 导包
  • 引入依赖演示
dependencies {
// api可以传递依赖、implementation不能传递依赖
// hutool工具类
api 'cn.hutool:hutool-all'
}
  • 引入模块演示
dependencies {
//依赖公共模块
api project(":模块地址")
implementation project(":GradleParent:GradleUtil")
}

2.4、settings.gradle配置文件

  • 配置模块间的信息,见后面具体实现

二、实现

1、项目结构

-GradleMultiModule
-GradleParent 包装common、util的父模块(实际中可以不要,这里演示导包、传递依赖等)
-GradleCommon 公共模块,用于装entity或者mapper等
-GradleUtil 工具类模块
-GradleServer 业务模块的父模块,用于给子模块统一导入springboot的包
-GradleOne 业务模块1 - 依赖GradleCommon、GradleUtil
-GradleTwo 业务模块2 - 依赖
-GradleStart 启动模块 - 导入GradleOne、GradleTwo依赖,启动项目
  • 结构

2、新建模块

  • 只演示一遍
  • 就是用idea创建springboot的gradle项目

3、各个模块的配置及类

3.1、GradleMultiModule模块

  • 顶级父模块

  • 统一配置 build.gradle (还可以配置gradle的版本)

  • 配置所有模块的关系 settings.gradle

  • ①、build.gradle

  • wrapper:配置gradle的版本,需要单独点击执行,执行后查看gradle版本是否生效

  • 具体配置
//插件
plugins {
id 'java'
id 'idea'
id 'java-library'
id 'org.springframework.boot' version '2.7.15'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
} //allprojects:所有模块生效
allprojects {
// 配置项目信息
group = 'com.cc'
version = '0.0.1-SNAPSHOT'
// 配置字符编码
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
} java {
sourceCompatibility = '8'
targetCompatibility = '8'
} //仓库配置
repositories {
//本地
mavenLocal()
//阿里仓库
maven { url 'https://maven.aliyun.com/repository/public/' }
//公司仓库。必须用:https。Gradle默认情况下不允许使用不安全的协议,以提高安全性。
maven { url 'https://******:****/repository/maven-public/' }
//中央仓库
mavenCentral()
} } //subprojects:所有子模块生效——springboot配置、导包版本管理、打包管理
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'idea'
//所有子模块都是springboot项目,如不是,不能打包。
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management' //所有子模块的-依赖版本管理
dependencyManagement {
dependencies {
dependency 'cn.hutool:hutool-all:5.0.7'
dependency "org.apache.commons:commons-lang3:3.5"
}
} //使用 gradle打包工具
jar {
manifest.attributes provider: 'gradle'
} tasks.named('test') {
useJUnitPlatform()
} } // 配置gradle的版本
wrapper {
//gradle的版本
gradleVersion = '8.4'
//版本类型:BIN、ALL(完全版,可以看gradle的代码)
distributionType = 'ALL'
}
  • ①、settings.gradle

  • 配置模块间的关系

  • 可以新增一个模块配置一个模块,不用一次性配置完成

  • 具体配置

rootProject.name = 'GradleMultiModule'

//公共模块总模块
include 'GradleParent'
include ':GradleParent:GradleCommon'
include ':GradleParent:GradleUtil'
project(':GradleParent:GradleCommon')?.name = 'GradleCommon'
project(':GradleParent:GradleUtil')?.name = 'GradleUtil' //业务模块总模块
include 'GradleServer'
include ':GradleServer:GradleStart'
include ':GradleServer:GradleOne'
include ':GradleServer:GradleTwo'
project(':GradleServer:GradleStart')?.name = 'GradleStart'
project(':GradleServer:GradleOne')?.name = 'GradleOne'
project(':GradleServer:GradleTwo')?.name = 'GradleTwo'

3.2、GradleParent模块(公共)

  • 统一公共模块依赖

  • build.gradle

//配置所有子模块
subprojects {
//这里可以导入公共的依赖
dependencies {
// compileOnly:这样做可以确保Lombok在编译时可用,但不会包含在最终的构建产物中,从而减小构建产物的大小。
// api:依赖可以传递给子模块
// compileOnlyApi:仅编译时可用,不包含在构建产物中,并且可以传递给子模块
compileOnlyApi 'org.projectlombok:lombok'
// 表示将Lombok库作为注解处理器导入。
annotationProcessor 'org.projectlombok:lombok'
}
}

3.3、GradleCommon模块(公共)

  • 公共模块,存放Entity

  • build.gradle

dependencies {
// api可以传递依赖、implementation不能传递依赖
// hutool工具类
api 'cn.hutool:hutool-all'
}

新建的类

3.4、GradleUtil模块(公共)

  • 存放所有工具类

  • build.gradle

dependencies {
// api可以传递依赖、implementation不能传递依赖
api 'org.apache.commons:commons-lang3'
}

新建类

3.5、GradleServer模块(业务)

  • 业务模块的父模块,用于统一导入springboot的包

  • build.gradle

// 子模块生效
subprojects {
//配置子模块依赖
dependencies {
//导入业务模块的公共包 - SpringBoot的包
//不用api,不用传递
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
}

3.6、GradleOne模块(业务)

  • 引入:GradleCommon、GradleUtil模块

  • 测试是否能使用引入模块的类、引入模块的依赖

  • build.gradle

dependencies {
//依赖公共模块
//api传递给子模块
api project(":GradleParent:GradleCommon")
api project(":GradleParent:GradleUtil")
}
  • 启动提示

  • 测试

3.7、GradleTwo模块(业务)

  • 引入:GradleCommon、GradleUtil模块

  • 测试是否能使用引入模块的类、引入模块的依赖

  • build.gradle

dependencies {
//依赖公共模块:implementation不传递依赖;api传递依赖
//这里不传递依赖,因为会造成GradleStart有多个重复依赖
implementation project(":GradleParent:GradleCommon")
implementation project(":GradleParent:GradleUtil")
}
  • 启动提示

  • 测试

3.8、GradleStart启动模块(业务)

  • 启动springboot项目

  • 引入所有业务模块

  • 配置SpringMVc

  • 此模块不写任何的业务

  • build.gradle

dependencies {
// 依赖GradleOne、GradleTwo,将该模块纳入启动中(加入springboot项目中)
api project(':GradleServer:GradleOne')
api project(':GradleServer:GradleTwo') // 其他依赖项...
}
  • SpringMvc配置
package com.cc.go.config;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource;
import java.util.ArrayList; /** <p>SpringMvc配置<p>
* <li>自定义Spring MVC的特性和扩展Spring MVC的功能</li>
* @since 2023/9/21
* @author CC
**/
@SpringBootConfiguration
public class WebGlobalConfig implements WebMvcConfigurer { @Resource
private MyHandlerInterceptor myHandlerInterceptor; /**
* 拦截器(Interceptors)
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
ArrayList<String> list = new ArrayList<>();
list.add("/login");
//自定义拦截器,或其他拦截器
registry.addInterceptor(myHandlerInterceptor)
//添加拦截地址为所有拦截
.addPathPatterns("/**")
//不拦截的地址
.excludePathPatterns(list);
} /**
* 资源处理器(Resource Handlers)
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/resources/","classpath:/static/");
} /**
* 跨域资源共享(CORS)
*/
@Bean
public CorsFilter corsFilter() {
//创建CorsConfiguration对象后添加配置
CorsConfiguration config = new CorsConfiguration();
//允许所有原始域
config.addAllowedOriginPattern("*");
//允许所有头部信息
config.addAllowedHeader("*");
//允许所有头部信息
config.addExposedHeader("*");
//放行的请求方式
// config.addAllowedMethod("GET");
// config.addAllowedMethod("PUT");
// config.addAllowedMethod("POST");
// config.addAllowedMethod("DELETE");
config.addAllowedMethod("*"); //放行全部请求 //是否发送Cookie
config.setAllowCredentials(true); //2. 添加映射路径
UrlBasedCorsConfigurationSource corsConfigurationSource =
new UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**", config);
//返回CorsFilter
return new CorsFilter(corsConfigurationSource);
}
}
  • 启动类
package com.cc.go;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /** <p>启动类<p>
* @since 2023/9/20
* @author CC
**/
@SpringBootApplication
public class GradleStartApplication { public static void main(String[] args) {
SpringApplication.run(GradleStartApplication.class, args);
} }
  • application.yml
server:
port: 2222

三、测试

1、传递依赖测试,在二实现中,已经验证了,能引入依赖

2、启动测试,测试业务模块的接口调用

  • 启动项目,模块启动

  • 接口调用

  • 调用后打印的

四、总结

Gradle8.4构建SpringBoot多模块项目的更多相关文章

  1. 使用IDEA构建Spring-boot多模块项目配置流程

    使用IDEA构建Spring-boot多模块项目配置流程 1.创建项目 点击Create New Project 在左侧选中Spring Initializer,保持默认配置,点击下一步. 在Grou ...

  2. Java秒杀系统实战系列~构建SpringBoot多模块项目

    摘要:本篇博文是“Java秒杀系统实战系列文章”的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项目,即“秒杀系统”! ...

  3. 使用Gradle构建springboot多模块项目,并混合groovy开发

    idea设置本地gradle 打包: build.gradle //声明gradle脚本自身需要使用的资源,优先执行 buildscript { ext { springBootVersion = ' ...

  4. SpringBoot多模块项目打包问题

    项目结构图如下: 在SpringBoot多模块项目打包时遇见如下错误: 1.repackage failed: Unable to find main class -> [Help 1] 解决步 ...

  5. Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块

    一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...

  6. 2017-09-26 发布 SpringBoot多模块项目实践(Multi-Module)

    https://segmentfault.com/a/1190000011367492?utm_source=tag-newest 2017-09-26 发布 SpringBoot多模块项目实践(Mu ...

  7. SSM001/构建maven多模块项目

    一.Idea构建maven多模块项目 1.创建maven项目--创建父模块 [1].File->New->Module... [2].点击next,填写:GroupId,ArtifactI ...

  8. 记Spring搭建功能完整的个人博客「Oyster」全过程[其二] Idea中Maven+SpringBoot多模块项目开发的设计和各种坑(模块间依赖和打包问题)

    大家好嘞,今天闲着没事干开写写博客,记录一下Maven+SpringBoot的多模块设计和遇到的坑. 多模块设计 简单说明一下截止目前的需求: 需要RESTful API:对文章.标签.分类和评论等的 ...

  9. docker部署 springboot 多模块项目+vue

    之前学习了docker,今天就来试试将这个项目打包成docker镜像并通过运行一个镜像来运行项目.这里使用的项目是el-admin.是一个开源的springboot后端管理框架(前端vue),有兴趣的 ...

  10. springboot 多模块项目创建

    1.File>new>project  直接点击next 2.输入groupId  .artifactId 3.选择项目保存路劲  finish 4.成功创建多模块项目的根模块 5.创建子 ...

随机推荐

  1. Docker理论

    一.什么是Dcoker 相信docker是什么大家都已经比较清楚了,网上有很详细的介绍,我这里只是大概描述一下. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足 ...

  2. ftp安装与配置 云服务器 CentOS7

    1.FTP的安装 #安装 yum install -y vsftpd #设置开机启动 systemctl enable vsftpd.service #启动 systemctl start vsftp ...

  3. [ROS串口通信]Serial库读入结构体

    本文介绍使用c++中Serial库读入结构体: //例如,结构体定义如下: typedef struct __attribute__((packed)) { uint16_t team; /* 本身队 ...

  4. KingbaseES 避免表的重写与数据类型二进制兼容

    一.关于KingbaseES变更表结构表的重写: 1.修改表结构可能会导致表进行重写(表OID发生变化). 2.修改表结构带有索引或者字段类型长度或者精度操作时,会触发索引重建. 3.不修改列内容且旧 ...

  5. 巧用dblink 实现多进程并行查询

    概述 对于分区表的大数据统计分析,由于数据量巨大,往往需要采用并行.但是数据库并行的效率相比分进程分表统计还是有比较大的差距.本文通过巧用dblink,实现分进程分分区统计数据. 例子 kingbas ...

  6. #根号分治,树上倍增#洛谷 3591 [POI2015]ODW

    题目 分析 考虑直接用倍增跳会TLE,设\(f[x][i]\)表示以\(x\)为起点每次跳\(i\)步的点权和, 这可以预处理出来,综合一下两种做法,当\(i>\sqrt{n}\)时直接上倍增, ...

  7. 上新啦KIT

    HMS Core上新啦!分析服务区服分析全新上线:机器学习服务OCR新增手写识别服务:3D建模续扫能力更新:视频编辑服务支持自定义上传素材--更多#HMS Core#能力可点击网页链接了解. 了解更多 ...

  8. MogDB/openGauss 坏块测试-对启动的影响-测试笔记1

    MogDB/openGauss 坏块测试-对启动的影响-测试笔记 1 在 UPDATE 操作提交后,脏块落盘前 kill 掉 mogdb 数据库,然后对 UPDATE 修改的坏进行以下破坏操作,仍然能 ...

  9. Mysql之主从异步

    数据库创建完后主从数据库数据保持同步 主数据库 mysql> SHOW MASTER STATUS; +------------------+----------+--------------+ ...

  10. TeamViewer 9发布-在Linux下安装运行

    TeamViewer 9发布-在Linux下安装运行 来源:Linux中国  作者:未知 关注我们:    这篇指南介绍了怎么样在 RedHat. CentOS. Fedora 和 Debian. U ...