Gradle8.4构建SpringBoot多模块项目

这篇具有很好参考价值的文章主要介绍了Gradle8.4构建SpringBoot多模块项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的区别

  • 关于implementation、api的传递依赖具体问题可以见我的博问(感谢大佬:@basic60)
    https://q.cnblogs.com/q/143866/

  • 关于所有的导包方式的区别也可以见管网:
    https://docs.gradle.org/current/userguide/java_library_plugin.html

  • 截图
    Gradle8.4构建SpringBoot多模块项目

④、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依赖,启动项目
  • 结构
    Gradle8.4构建SpringBoot多模块项目

2、新建模块

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

Gradle8.4构建SpringBoot多模块项目

3、各个模块的配置及类

3.1、GradleMultiModule模块

  • 顶级父模块

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

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

  • ①、build.gradle

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

Gradle8.4构建SpringBoot多模块项目

  • 具体配置
//插件
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'
}

新建的类
Gradle8.4构建SpringBoot多模块项目

3.4、GradleUtil模块(公共)

  • 存放所有工具类

  • build.gradle

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

新建类
Gradle8.4构建SpringBoot多模块项目

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")
}
  • 启动提示
    Gradle8.4构建SpringBoot多模块项目

  • 测试
    Gradle8.4构建SpringBoot多模块项目

3.7、GradleTwo模块(业务)

  • 引入:GradleCommon、GradleUtil模块

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

  • build.gradle

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

  • 测试
    Gradle8.4构建SpringBoot多模块项目

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多模块项目

  • 接口调用
    Gradle8.4构建SpringBoot多模块项目

  • 调用后打印的
    Gradle8.4构建SpringBoot多模块项目文章来源地址https://www.toymoban.com/news/detail-730526.html

四、总结

  • 项目地址(blog-code/SpringBoot/GradleMultiModule)
    https://gitee.com/KakarottoChen/blog-code.git

到了这里,关于Gradle8.4构建SpringBoot多模块项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jenkins怎么配置Gradle只构建子项目,而不构建父项目,Jenkins配置gradle详细介绍

            Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试

    2024年02月03日
    浏览(31)
  • Android使用Gradle kotlin dsl 优雅配置构建项目

    Gradle的出现可以说是为Android的项目构建插上了翅膀,让Android的apk打包构建更简单高效。开发者可以自己去定义打包的过程,比如在打包的过程中进行字节码插桩,多渠道打包,在老版本的Android中还可以依赖Gradle实现APP的插件化开发。但是Gradle是使用Groovy语言开发的,虽然说

    2024年02月13日
    浏览(39)
  • Android Studio或IntelliJ IDEA 构建Gradle项目时,gradle下载时连接超时问题

    用IntelliJ IDEA 创建一个Gradle项目,下载gradle时显示连接超时。 问题如下 : 在项目根目录的gradle目录下,gradle-wrapper.properties文件定义了用于构建项目的gradle工具的下载地址 services.gradle.org 。由于该网站的服务器在国外,所以在国内访问可能存在连接超时问题,访问不到。 笔者

    2024年02月04日
    浏览(40)
  • cocos构建 Android 项目Android studio gradle 8.0 报错

    记录一下踩坑 今天用cocos构建 了一个Android 项目 然后用Android studio 打开 TestProject_Helloworldbuildandroidproj 项目, 由于我的Android studio 用的是jdk17, 所以提示要升级gradle 插件版本,所以我升级成了gradle 8.0 . 但是编译的时候报错 Namespace not specified. Please specify a namespace in the modu

    2024年02月16日
    浏览(93)
  • IDEA用Gradle构建项目时,lombok插件无效的解决办法

    Lombok 可用来帮助开发人员消除 Java 的重复代码,尤其是对于简单的 Java 对象(POJO),比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File - Settings - Plugins,在中间Marketplace下面输入Lombok搜索后进行安装,安装后会提

    2024年02月14日
    浏览(34)
  • ReactNative项目构建分析与思考之native_modules.gradle

    上一篇文章分析完 react-native-gradle-plugin 后,我们知道了react-native-gradle-plugin 主要是对依赖环境,以及RN的依赖版本进行管理。 本篇文章来接着分析 native_modules.gradle 这个脚本,这个脚本是React Native构建中比较重要的一个角色。 这是一个源码形式的脚本文件,虽然只有一个文件

    2024年03月20日
    浏览(32)
  • gradle+springboot实现多项目分环境打包

    上面的文件中,控制环境变量的代码块是 环境变量在bootstrap.ym中 打包命令 执行结果截图 -x test 是排除单元测试 -Pprofile=dev是传递环境参数 打包完成后,bootstrap.yml中的变量会替换为dev 下一篇 打包时,外部依赖的jar,不打进jar包里

    2024年02月02日
    浏览(33)
  • 记本地新建一个gradle方式springboot项目过程

    打算使用gradle在idea新建个springboot项目,然后坑很多,记录一下 原来我的idea应该是社区版,新建项目时候没有可以选择spring相关配置,然后卸载了重装,之前问题是启动是启动起来了,但是状态栏那边一直显示编译中,一直找不到具体原因,所以卸载和重装了。 接下来就是

    2024年02月10日
    浏览(27)
  • 使用Gradle7.6.1 + SpringBoot3.0.2 + java17创建微服务项目(学习)

    这是一个大胆的决定 技术 版本 spring-boot 3.0.2 spring-cloud 2022.0.2 spring-cloud-alibaba 2022.0.0.0-RC2 mybatis-plus-boot-starter 3.5.3.1 mysql-connector-java 8.0.32 技术 版本 java 17 gradle 7.6.1 IDEA 2022.2.4 Nvcat 15 MySQL 8.0.32 打开IDEA创建 SpringBoot项目 删除父项目中的src模块 新建两个子项目(新建时会重新创建

    2024年02月06日
    浏览(73)
  • C++集群聊天服务器 网络模块+业务模块+CMake构建项目 笔记 (上)

    跟着施磊老师做C++项目,施磊老师_腾讯课堂 (qq.com) 一、网络模块ChatServer chatserver.hpp chatserver.cpp json 里边会包含一个 msgid .由于客户端和服务器通信收发消息,需要判断这个消息是属于哪种业务的,就需要一个业务的标识,所以就用 msgid 来表示业务的标识.在 onMessage 函数中,并不想

    2024年02月20日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包