记一次Gradle搭建多模块项目遇到的问题

文章讲述了作者在创建了一个包含三个模块的项目后,发现各模块间有大量重复依赖,于是决定进行改造以优化依赖管理。作者首次尝试使用Gradle,通过在根目录设置settings.gradle和build.gradle文件,实现了全局依赖和版本的统一管理,同时在子模块中引用其他模块。过程中遇到了一些问题,但最终成功改进了项目的结构。
摘要由CSDN通过智能技术生成

前言

最开始,我创建了一个空的项目,并在该项目下依次创建了3个模块。
但是我发现,这几个模块引入的依赖绝大多数都是相同的
于是,我灵光一闪(其实是在最初构建项目时的没想到),开始着手进行改造
但由于也是第一次用Gradle,还相对生疏不少,踩了一些坑,故留此记录

改造开始

  1. 在项目根目录下,创建settings.gradle及build.gradle
  2. (根目录)setting.gradle配置内容
pluginManagement {
    repositories {
        maven { url 'https://repo.spring.io/milestone' }
        gradlePluginPortal()
    }
}
rootProject.name = 'Server-main'
include ':server-1'
include ':server-2'
include ':server-3'
  1. (根目录)build.gradle配置内容
buildscript {
    ext {
        springBootVersion = '3.1.0-M1'
    }
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public/' }
        maven { url 'https://maven.aliyun.com/repository/google/' }
        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }
        maven {
            url 'http://mirrors.huaweicloud.com/repository/maven/'
            allowInsecureProtocol = true
        }
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

// 全局项目配置
allprojects {
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    apply plugin:'idea'
}
// 子模块配置(可以理解为子模块的全局配置)
subprojects {
    apply plugin:'java'
    sourceCompatibility = '17'
    targetCompatibility = '17'
    [compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public/' }
        maven { url 'https://maven.aliyun.com/repository/google/' }
        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }
        maven {
            url 'http://mirrors.huaweicloud.com/repository/maven/'
            allowInsecureProtocol = true
        }
        mavenCentral()
    }
    // 统一版本管理
    ext {
    }
    // 统一依赖管理
    dependencies {
        testImplementation 'org.springframework.boot:spring-boot-starter-test:3.0.4'
        testImplementation 'junit:junit:4.12'
    }
    tasks.named('test') {
        useJUnitPlatform()
    }
}
  1. 子模块需要删除setting.gradle,并调整build.gradle的内容,下以server-1举例,其他子模块服务类同
archivesBaseName = "server-1"
dependencies {
  // 专属于这个模块的依赖
  ...
  // 引入server-2 | 常见应用于项目统一工具包的引入
  compile project(":server-2")
}
// 动态移除对kotlin构建插件的权限,避免子模块构建报错
tasks.register("prepareKotlinBuildScriptModel") {}

写在最后

有关gradle的使用,我正在研究,后期会单独写一个整合gradle配置的记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值