MENU

使用gradle 打造多模块spring工程

2020 年 07 月 04 日 • Java

一直以来都在使用Maven来构建程序,更换为gradle后,一直不知道如何构建像maven结构一样的多模块应用,搜所了大量文章都不好用,特意google详细学习了一下,打造了一个通用的spring多模块构建,过程如下

1.新建一个gradle工程

2.将src 目录删除并修改父模块build.gralde配置

  • 父模块配置 自行根据项目需求进行更改 .案例如下:
// 需要使用的插件.
plugins {
    id 'org.springframework.boot' version "2.2.5.RELEASE"
}
// 版本号使用变量形式
ext {
    springBootVersion = '2.2.5.RELEASE'
    fastjsonVersion = '1.2.68'
    mybatisPlusVersion = '3.3.1.tmp'
    druidVersion = '1.1.20'
    dynamicDatasource='3.0.0'
    commonsMath3Version= '3.6.1'
    qnVersion = '[7.2.0, 7.2.99]'
}

// 子模块配置
subprojects {
        
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'maven'
    apply plugin: 'java'
    apply plugin: 'idea'

    group = 'cn.yhow'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'
    
    repositories {
        mavenLocal()
        maven { url 'https://maven.aliyun.com/repository/public' }
        mavenCentral()
    }

    // 集中式管理依赖版本号,并没有真实依赖
    // 等同于Maven中的dependencyManagement
    dependencyManagement {
        dependencies {
            // mybatis-plus启动器
            dependency "com.baomidou:mybatis-plus-boot-starter:${mybatisPlusVersion}"
            dependency "com.baomidou:dynamic-datasource-spring-boot-starter:${dynamicDatasource}"
            //druid连接池
            dependency "com.alibaba:druid:${druidVersion}"
            // json处理
            dependency "com.alibaba:fastjson:${fastjsonVersion}"
            dependency "org.apache.commons:commons-math3:${commonsMath3Version}"
            dependency "com.qiniu:qiniu-java-sdk:${qnVersion}"

        }
        imports {
            mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"
            mavenBom 'org.keycloak.bom:keycloak-adapter-bom:9.0.3'
        }
    }
        
        // 真实依赖.
    dependencies {
        annotationProcessor group: 'org.projectlombok', name: 'lombok'
        // 类中的 setter/getter,使用注解c
        compileOnly group: 'org.projectlombok', name: 'lombok'
    }

    test {
        useJUnitPlatform()
    }
}

3.新建两个子模块 B(模块)依赖A(模块)

4.更改A模块 gradle.build

// A模块 只作为一个依赖使用 本身并没有什么spring启动 则配置如下即可
dependencies {
        // 不需要版本号 在父模块已集中管理了dependencyManagement
    compile 'com.alibaba:druid'
}

5.更改B模块gradle.build

// B模块 作为一个spring 程序的入口 并依赖A模块
// spring 插件 子模块不需要启动时 不需要此行
apply plugin: 'org.springframework.boot'

dependencies {
        //B模块依赖A模块配置 A模块中的依赖自动依赖到B
    compile project(':A') 
    // B模块特有的依赖 
    compile 'org.apache.commons:commons-math3' 

}

这样就大功告成了.

常见问题:

一.模块找不到XXX 错误

解决方案:

  • 1.检查父模块setting.gradle

    // 工程名
    rootProject.name = 'build-modules-demo'
    // 包含的子模块
    include 'A'
    include 'B'
  • 2.检查子模块依赖另一个子模块 compile project(':A') 书写是否正确 冒号不能省略

    dependencies {
            //B模块依赖A模块配置 A模块中的依赖自动依赖到B
        compile project(':A') 
        // B模块特有的依赖 
        compile 'org.apache.commons:commons-math3' 
    
    }