先通过IDEA创建一个Gradle的Java项目,并把src目录删除,其目录如下:
gradle-multi-projects
- gradle
- wrapper
- gradle-wrapper.jar
- gradle-wrapper.properties
- build.gradle
- gradlew
- gradlew.bat
- settings.gradle
接下来我们将从这个项目开始改造成一个多模块的SpringBoot项目。
引入插件
引入插件比较推荐buildscript的方式,这里我们需要引入两个插件:
- spring-boot-gradle-plugin:该插件会检测何时应用某些其他插件并做出相应反应。例如,当java应用插件时,会自动配置构建可执行 jar 的任务。简单地针对我们项目来说,就是帮忙我们构建可执行的jar包。
- dependency-management-plugin:依赖管理插件,提供了类似于maven中pom形式的依赖管理。
buildscript {repositories {mavenLocal()maven { url 'https://maven.aliyun.com/repository/public/' }mavenCentral()}ext {springBootVersion = "2.6.6"springDependencyManagementVersion = '1.0.11.RELEASE'}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")classpath("io.spring.gradle:dependency-management-plugin:${springDependencyManagementVersion}")}}
应用插件
前面只是引入了参与构建的插件,下面我们需要应用这些插件:
buildscript {
...
}
allprojects {
group = 'com.example'
version = '1.0.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
// 指定JDK的版本
sourceCompatibility = '11'
targetCompatibility = '11'
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenCentral()
}
// springboot依赖管理,子模块如果添加了springboot相关的依赖,可以不指定springboot版本
// 整个项目下的springboot都由这里统一控制
dependencyManagement {
imports {
mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"
}
}
}
subprojects {
// 由于根项目只是用来管理整个项目,并不需要引入springboot的插件
// 该插件为:org.springframework.boot:spring-boot-gradle-plugin
apply plugin: 'org.springframework.boot'
}
Junit测试
buildscript {
...
}
allprojects {
...
}
subprojects {
apply plugin: 'org.springframework.boot'
dependencies {
...
testImplementation 'org.springframework.boot:spring-boot-starter-test'
...
}
test {
useJUnitPlatform()
}
}
新增子模块
前面讲到,settings.gradle所在的目录会被gradle认为是根项目,所以我们需要在根目录下新建一个文件夹,其名称为子模块的名称,如sub-module-1,并在该子模块目录下放置一个空的build.gralde文件(存在此文件才能参与gradle的构建任务),同时在settings.gradle中引入当前模块:
rootProject.name = 'gradle-multi-projects'
include('sub-module-1')
其文件目录如下:
gradle-multi-projects
- gradle
- wrapper
- gradle-wrapper.jar
- gradle-wrapper.properties
- sub-module-1
- build.gradle
- build.gradle
- gradlew
- gradlew.bat
- settings.gradle
假如该子模块为Web模块,我们可以在子模块的build.gralde引入对应的依赖:
dependencies {
// 由于通过mavenBom进行了springboot的依赖版本管理,这里我们不需要指定其版本
implementation 'org.springframework.boot:spring-boot-starter-web'
}
假如该模块不是可执行的模块,只是放置一些common的常量,工具等,我们需要在其build.gralde 进行配置:
bootJar {
enabled = false
}
jar {
enabled = true
}
假如该模块的构建依赖于另一个子模块,我们需要在其build.gralde 进行配置:
dependencies {
// 冒号后为子模块的模块名称,对应到settings.gradle中引入的模块名称
implementation project(':sub-common-mudole')
}
