1 概述
Gradle由于构建速度比Maven快,且比Maven灵活,因此很多后端的应用都使用了Gradle进行构建,但一个问题是,Gradle的多模块项目比较难构建,再加上Gradle的更新非常快,这就给构建一个多模块Gradle项目造成了不少的困难。
基于此出发点,本文提供了两种形式的使用Gradle构建的Spring Boot多模块项目:
Java + GradleKotlin + Gradle + Kotlin DSL
为了减少出现各种错误的概率,步骤做得非常详细(多图预警),文末也附上了源码,下面就一起来看看吧。
2 环境
Gradle 7.4Spring Boot 2.6.4Kotlin 1.6.10OpenJDK 17
3 Java + Gradle
主要步骤:
- 使用
Spring Initializer创建项目 - 修改
build.gradle - 创建模块
- 编写模块
- 运行
- 测试
3.1 创建项目
直接使用IDEA提供的Spring Initializer即可,构建工具选择Gradle:
依赖:
构建完成后删除src目录,因为根目录属于管理模块目录不提供运行的应用:
3.2 修改build.gradle
这是最复杂的一步,并且Gradle版本更新的话步骤可能会不一样,首先在底部添加一个空的subprojects:
接着把dependencies以及tasks.name('test')移动进去:
最后一步是,在subprojects开头,添加插件apply,根据默认初始化创建的plugins,逐一添加。
比如这里默认使用了三个插件:
apply到subprojects中:
3.3 创建模块
File -> New -> Module:
输入模块名即可,这里的例子是创建两个模块:
serviceapp
创建好后如图所示:
完成创建之后,把两个模块中的build.gradle除了repositories之外的全部删去,仅保留repositories:
3.4 编写模块
3.4.1 service模块
首先创建包,根据根目录中的build.gradle中的group创建:
接着编写一个叫TestService的带@Service注解的类,里面包含一个test方法:
同时修改service模块的build.gradle,添加bootJar以及jar选项:
1 | bash复制代码bootJar{ |
3.4.2 app模块
同样先创建包:
接着在app模块的build.gradle添加service模块的依赖:
再创建启动类以及一个Controller:
代码如下:
1 | java复制代码package com.example.app; |
1 | java复制代码package com.example.controller; |
注意,因为Spring Boot无法自动识别其他模块下的类,所以需要手动处理一下,有三种方法:
- 第一种:使用
@Import,也就是@Import(TestService.class) - 第二种:使用
scanBasePackageClasses,也就是@SpringBootApplication(scanBasePackageClasses={TestService.class}) - 第三种:使用
scanBasePackages,也就是例子中的代码@SpringBootApplication(scanBasePackages = "com.example")
3.5 运行
接下来就可以运行了,可以直接点击Application旁边的绿色小三角:
或者从运行配置中选择Application运行(IDEA自动创建的,原来的那个JavaGradleApplication带一个×是因为启动文件已经删除了,可以顺便把该配置删除):
没问题的话就可以成功运行了:
同时浏览器访问localhost:8080/test会出现test字样:
3.6 测试
创建包和测试类:
1 | java复制代码package com.example.test; |
接着进行测试:
当然测试也可以跑一下Gradle中的任务:
3.7 打包
打包的话直接运行bootJar即可:
会在build/libs下生成JAR包:
测试:
再次访问localhost:8080/test没有问题。
这样使用Java+Gradle构建一个多模块的Spring Boot项目就成功了。
4 Kotlin + Gradle + Kotlin DSL
Kotlin DSL在原生Gradle(Groovy DSL)的基础上进行改进,但同时语法也变得更加陌生,难度因此也加大了不少,不过这并没有难倒笔者。构建多模块的基本步骤与上面类似:
- 使用
Spring Initializer创建项目 - 修改
build.gradle.kts - 创建模块
- 编写模块
- 运行
- 测试
4.1 创建项目
选择Kotlin+Gradle:
依赖:
同样删除src:
4.2 修改build.gradle.kts
同样在尾部添加一个空的subprojects:
把dependencies以及tasks移动进去:
最后在subprojects开始处apply插件,根据默认的插件进行apply:
代码如下:
1 | bash复制代码apply{ |
plugins中的kotlin是org.jetbrains.kotlin的简写,在subprjects中注意加上即可。
4.3 创建模块
File -> New -> Module,把一些必要选项勾选上:
这里同样创建两个模块:
serviceapp
同样把两个模块中的**build.gradle.kts删除其他部分留下repositories**:
4.4 编写模块
4.4.1 service模块
首先根据根目录的build.gradle.kts创建包:
编写TestService:
最后修改build.gradle.kts,加上tasks.bootJar与tasks.jar:
1 | bash复制代码tasks.bootJar{ |
4.4.2 app模块
先创建包:
添加对service模块的依赖:
再创建一个启动类以及一个Controller:
代码如下:
1 | kotlin复制代码package com.example.app |
1 | kotlin复制代码package com.example.app.controller |
4.5 运行
点击main旁边的绿色小三角即可:
运行成功:
同样可以访问localhost:8080/test:
4.6 测试
创建包与测试类:
1 | kotlin复制代码package com.example.test |
直接点击小三角测试即可:
测试通过。
4.7 打包
bootJar即可:
同样会在libs下生成JAR:
运行测试后没有问题,这样Kotlin+Gradle+Kotlin DSL的多模块Spring Boot项目就算创建完成了。
5 源码
附上两个例子的源码:
本文转载自: 掘金