ToB企服应用市场:ToB评测及商务社交产业平台

标题: Gradle8.4构建SpringBoot多模块项目 [打印本页]

作者: 铁佛    时间: 2023-11-26 21:59
标题: Gradle8.4构建SpringBoot多模块项目
Gradle8.4构建SpringBoot多模块项目

一、基本

1、版本

软件版本Gradle8.4SpringBoot2.7.15JDK82、Gradle基本介绍

2.1、使用Wrapper方式构建

2.2、导包方式

  1. implementation
  2. api
  3. compileOnly
  4. compileOnlyApi
复制代码
①、implementation
②、api
③、implementation和api的区别
④、compileOnly
⑤、compileOnlyApi
2.3、build.gradle配置文件

①、allprojects
  1. allprojects {
  2. }
复制代码
②、subprojects
  1. subprojects {
  2. }
复制代码
③、dependencies
  1. dependencies {
  2.     // api可以传递依赖、implementation不能传递依赖
  3.     // hutool工具类
  4.     api 'cn.hutool:hutool-all'
  5. }
复制代码
  1. dependencies {
  2.     //依赖公共模块
  3.     api project(":模块地址")
  4.     implementation project(":GradleParent:GradleUtil")
  5. }
复制代码
2.4、settings.gradle配置文件

二、实现

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


3、各个模块的配置及类

3.1、GradleMultiModule模块


  1. //插件
  2. plugins {
  3.     id 'java'
  4.     id 'idea'
  5.     id 'java-library'
  6.     id 'org.springframework.boot' version '2.7.15'
  7.     id 'io.spring.dependency-management' version '1.0.15.RELEASE'
  8. }
  9. //allprojects:所有模块生效
  10. allprojects {
  11.     // 配置项目信息
  12.     group = 'com.cc'
  13.     version = '0.0.1-SNAPSHOT'
  14.     // 配置字符编码
  15.     tasks.withType(JavaCompile).configureEach {
  16.         options.encoding = 'UTF-8'
  17.     }
  18.     java {
  19.         sourceCompatibility = '8'
  20.         targetCompatibility = '8'
  21.     }
  22.     //仓库配置
  23.     repositories {
  24.         //本地
  25.         mavenLocal()
  26.         //阿里仓库
  27.         maven { url 'https://maven.aliyun.com/repository/public/' }
  28.         //公司仓库。必须用:https。Gradle默认情况下不允许使用不安全的协议,以提高安全性。
  29.         maven { url 'https://******:****/repository/maven-public/' }
  30.         //中央仓库
  31.         mavenCentral()
  32.     }
  33. }
  34. //subprojects:所有子模块生效——springboot配置、导包版本管理、打包管理
  35. subprojects {
  36.     apply plugin: 'java'
  37.     apply plugin: 'java-library'
  38.     apply plugin: 'idea'
  39.     //所有子模块都是springboot项目,如不是,不能打包。
  40.     apply plugin: 'org.springframework.boot'
  41.     apply plugin: 'io.spring.dependency-management'
  42.     //所有子模块的-依赖版本管理
  43.     dependencyManagement {
  44.         dependencies {
  45.             dependency 'cn.hutool:hutool-all:5.0.7'
  46.             dependency "org.apache.commons:commons-lang3:3.5"
  47.         }
  48.     }
  49.     //使用 gradle打包工具
  50.     jar {
  51.         manifest.attributes provider: 'gradle'
  52.     }
  53.     tasks.named('test') {
  54.         useJUnitPlatform()
  55.     }
  56. }
  57. // 配置gradle的版本
  58. wrapper {
  59.     //gradle的版本
  60.     gradleVersion = '8.4'
  61.     //版本类型:BIN、ALL(完全版,可以看gradle的代码)
  62.     distributionType = 'ALL'
  63. }
复制代码
  1. rootProject.name = 'GradleMultiModule'
  2. //公共模块总模块
  3. include 'GradleParent'
  4. include ':GradleParent:GradleCommon'
  5. include ':GradleParent:GradleUtil'
  6. project(':GradleParent:GradleCommon')?.name = 'GradleCommon'
  7. project(':GradleParent:GradleUtil')?.name = 'GradleUtil'
  8. //业务模块总模块
  9. include 'GradleServer'
  10. include ':GradleServer:GradleStart'
  11. include ':GradleServer:GradleOne'
  12. include ':GradleServer:GradleTwo'
  13. project(':GradleServer:GradleStart')?.name = 'GradleStart'
  14. project(':GradleServer:GradleOne')?.name = 'GradleOne'
  15. project(':GradleServer:GradleTwo')?.name = 'GradleTwo'
复制代码
3.2、GradleParent模块(公共)

  1. //配置所有子模块
  2. subprojects {
  3.     //这里可以导入公共的依赖
  4.     dependencies {
  5.         // compileOnly:这样做可以确保Lombok在编译时可用,但不会包含在最终的构建产物中,从而减小构建产物的大小。
  6.         // api:依赖可以传递给子模块
  7.         // compileOnlyApi:仅编译时可用,不包含在构建产物中,并且可以传递给子模块
  8.         compileOnlyApi 'org.projectlombok:lombok'
  9.         // 表示将Lombok库作为注解处理器导入。
  10.         annotationProcessor 'org.projectlombok:lombok'
  11.     }
  12. }
复制代码
3.3、GradleCommon模块(公共)

  1. dependencies {
  2.     // api可以传递依赖、implementation不能传递依赖
  3.     // hutool工具类
  4.     api 'cn.hutool:hutool-all'
  5. }
复制代码
新建的类

3.4、GradleUtil模块(公共)

  1. dependencies {
  2.     // api可以传递依赖、implementation不能传递依赖
  3.     api 'org.apache.commons:commons-lang3'
  4. }
复制代码
新建类

3.5、GradleServer模块(业务)

  1. // 子模块生效
  2. subprojects {
  3.     //配置子模块依赖
  4.     dependencies {
  5.         //导入业务模块的公共包 - SpringBoot的包
  6.         //不用api,不用传递
  7.         implementation 'org.springframework.boot:spring-boot-starter'
  8.         implementation 'org.springframework.boot:spring-boot-starter-web'
  9.         testImplementation 'org.springframework.boot:spring-boot-starter-test'
  10.     }
  11. }
复制代码
3.6、GradleOne模块(业务)

  1. dependencies {
  2.     //依赖公共模块
  3.     //api传递给子模块
  4.     api project(":GradleParent:GradleCommon")
  5.     api project(":GradleParent:GradleUtil")
  6. }
复制代码
3.7、GradleTwo模块(业务)

  1. dependencies {
  2.     //依赖公共模块:implementation不传递依赖;api传递依赖
  3.     //这里不传递依赖,因为会造成GradleStart有多个重复依赖
  4.     implementation project(":GradleParent:GradleCommon")
  5.     implementation project(":GradleParent:GradleUtil")
  6. }
复制代码
3.8、GradleStart启动模块(业务)

  1. dependencies {
  2.     // 依赖GradleOne、GradleTwo,将该模块纳入启动中(加入springboot项目中)
  3.     api project(':GradleServer:GradleOne')
  4.     api project(':GradleServer:GradleTwo')
  5.     // 其他依赖项...
  6. }
复制代码
  1. package com.cc.go.config;
  2. import org.springframework.boot.SpringBootConfiguration;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.web.cors.CorsConfiguration;
  5. import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
  6. import org.springframework.web.filter.CorsFilter;
  7. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  8. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  9. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  10. import javax.annotation.Resource;
  11. import java.util.ArrayList;
  12. /** <p>SpringMvc配置<p>
  13. * <li>自定义Spring MVC的特性和扩展Spring MVC的功能</li>
  14. * @since 2023/9/21
  15. * @author CC
  16. **/
  17. @SpringBootConfiguration
  18. public class WebGlobalConfig implements WebMvcConfigurer {
  19.     @Resource
  20.     private MyHandlerInterceptor myHandlerInterceptor;
  21.     /**
  22.      * 拦截器(Interceptors)
  23.      */
  24.     @Override
  25.     public void addInterceptors(InterceptorRegistry registry) {
  26.         ArrayList<String> list = new ArrayList<>();
  27.         list.add("/login");
  28.         //自定义拦截器,或其他拦截器
  29.         registry.addInterceptor(myHandlerInterceptor)
  30.                 //添加拦截地址为所有拦截
  31.                 .addPathPatterns("/**")
  32.                 //不拦截的地址
  33.                 .excludePathPatterns(list);
  34.     }
  35.     /**
  36.      * 资源处理器(Resource Handlers)
  37.      */
  38.     @Override
  39.     public void addResourceHandlers(ResourceHandlerRegistry registry) {
  40.         registry.addResourceHandler("/**")
  41.                 .addResourceLocations("classpath:/resources/","classpath:/static/");
  42.     }
  43.     /**
  44.      * 跨域资源共享(CORS)
  45.      */
  46.     @Bean
  47.     public CorsFilter corsFilter() {
  48.         //创建CorsConfiguration对象后添加配置
  49.         CorsConfiguration config = new CorsConfiguration();
  50.         //允许所有原始域
  51.         config.addAllowedOriginPattern("*");
  52.         //允许所有头部信息
  53.         config.addAllowedHeader("*");
  54.         //允许所有头部信息
  55.         config.addExposedHeader("*");
  56.         //放行的请求方式
  57. //        config.addAllowedMethod("GET");
  58. //        config.addAllowedMethod("PUT");
  59. //        config.addAllowedMethod("POST");
  60. //        config.addAllowedMethod("DELETE");
  61.         config.addAllowedMethod("*");     //放行全部请求
  62.         //是否发送Cookie
  63.         config.setAllowCredentials(true);
  64.         //2. 添加映射路径
  65.         UrlBasedCorsConfigurationSource corsConfigurationSource =
  66.                 new UrlBasedCorsConfigurationSource();
  67.         corsConfigurationSource.registerCorsConfiguration("/**", config);
  68.         //返回CorsFilter
  69.         return new CorsFilter(corsConfigurationSource);
  70.     }
  71. }
复制代码
  1. package com.cc.go;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. /** <p>启动类<p>
  5. * @since 2023/9/20
  6. * @author CC
  7. **/
  8. @SpringBootApplication
  9. public class GradleStartApplication {
  10.     public static void main(String[] args) {
  11.         SpringApplication.run(GradleStartApplication.class, args);
  12.     }
  13. }
复制代码
  1. server:
  2.   port: 2222
复制代码
三、测试

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

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

四、总结


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4