搭建过程
搭建环境:IDEA 2202.3.2
项目框架:Springboot3.0.2
项目名称:Muhammad
项目结构:Muh-app(子模块:项目启动入口,调取Muh-Design模块资源)、Muh-Design(子模块,设计模块)
1.原始状态
使用Spring Initializer
创建项目,构建工具选择Gradle
项目创建成功后,目录结构为:
xxxxx
|— .gradle
|— .idea
|— gradle
|— wrapper:Gradle命令的包装,能够让机器在不安装Gradle的情况下运行程序,便于团队开发过程中统一Gradle构建版本
|— src
|— .gitignore
|— build.gradle:管理依赖包的配置文件(相当于Maven的pom.xml)
|— gradlew:Gradle命令的包装(Linux版),当机器上没有Gradle时,可以使用gradlew命令构建项目
|— gradlew.bat:Gradle命令的包装(Windows版),当机器上没有Gradle时,可以使用gradlew命令构建项目
|— HELP.md
|— settings.gradle:可以视为多模块项目总目录,Gradle通过该配置构建各模块,并组织模块间的关系
2.构建完成后,删除多余目录
删除src
目录(父级项目不提供代码运行,仅用于模块管理)
3.创建子模块
- 创建子模块Muh-app:项目启动模块(统一入口)
- 创建子模块Muh-design:知识库-设计相关
- 删除两个子模块的多余文件和文件夹:
.gitignore
、HELP.md
、settings.gradle
- 两个模块构建完成后,清空两个模块中
build.gradle
配置文件的所有配置信息(子模块的相关配置以后可以在根项目的build.gradle
配置文件中统一管理) - 删除子模块Muh-design的启动类
src/main/java/com/xfather/muhdesign/MuhDesignApplication.java
和测试启动类src/test/java/com/xfather/muhdesign/MuhDesignApplicationTests.java
4.修改根项目的build.gradle
文件
-
添加全局配置
allprojects
allprojects { // 将以下内容移动到allprojects配置中 group = 'com.xfather' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' targetCompatibility = '17' // 将plugins中的所有插件引入到全局配置中(根据默认初始化的plugins逐一添加) apply plugin:'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' repositories { mavenCentral() } }
-
添加子模块配置
subprojects
// 适用于子模块配置 subprojects { dependencies { implementation 'org.springframework.boot:spring-boot-starter' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' } }
-
添加特定模块配置(各子模块个性化配置在这里添加)
// 特定项目配置 project(':Muh-app'){ dependencies { // Muh-app项目是Web应用启动入口,需要引入spring-boot-starter-web implementation 'org.springframework.boot:spring-boot-starter-web' // 添加项目依赖(给Muh-app项目引入Muh-design项目依赖) implementation project(':Muh-design') } } // 特定项目配置 project(':Muh-design'){ }
-
删除多余的
task.name('test')
配置 -
附:完整
build.gradle
文件配置// 插件管理 plugins { id 'java' // springboot插件依赖 id 'org.springframework.boot' version '3.0.2' // 版本管理插件依赖 id 'io.spring.dependency-management' version '1.1.0' } // 全局配置管理(适用于所有模块【含子模块】) allprojects { group = 'com.xfather' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' targetCompatibility = '17' apply plugin:'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' repositories { mavenCentral() } } // 适用于子模块配置 subprojects { dependencies { implementation 'org.springframework.boot:spring-boot-starter' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' } } // 特定项目配置 project(':Muh-app'){ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // 添加项目依赖(声明对Muh-design模块的依赖) implementation project(':Muh-design') } } // 特定项目配置 project(':Muh-design'){ }
5.修改根项目的settings.gradle
配置文件
引入项目引用,增加以下配置
// 此处要按照加载顺序依次配置
include('Muh-design','Muh-app')
6.在Muh-design
模块中创建测试服务
- 创建
com.xfather.muhdesign.service.TestService
- 添加测试服务
public String hello(){ return "Hello,I'm Muh-design"; }
- 给
TestService
增加@Service
注解
7.在Muh-app
模块中创建测试控制
- 创建
com.xfather.muhapp.controller.TestController
- 添加测试调用
TestService service; TestController(TestService service){ this.service = service; } @GetMapping("hello") public String hello(){ return service.hello(); }
- 给
TestController
增加@RestController
注解
8.修改Springboot包扫描
因为Springboot无法自动识别其他模块下的类,因此需要手动处理,有三种方法:
- 第一种:使用
@Import
导入对应的类
如:在controller中增加@Import(TestService.class)
- 第二种:在
@SpringBootApplication
上增加scanBasePackageClasses
设定
即:@SpringBootApplication(scanBasePackageClasses = {TestService.class})
- 第三种:在
@SpringBootApplication
上增加scanBasePackage
设定
即:@SpringBootApplication(scanBasePackages = "com.xfather")
9.启动测试
启动MuhAppApplication
,访问 http://127.0.0.1:8080/hello 即可看到运行结果
常见问题
-
Task ‘prepareKotlinBuildScriptModel’ not found in project:
问题原因:Gradle的某些版本中可能存在该问题,怀疑与Kotlin插件有关
解决办法一:在build.gradle文件中增加一个空的task来掩盖这个问题task prepareKotlinBuildScriptModel {}
或
tasks.register("prepareKotlinBuildScriptModel"){}
解决办法二:禁用IDEA的Kotlin插件
文件 ——> 设置 ——> 插件 ——> 已安装 ——> 禁用Kotlin
-
无法自动装配,未找到"XXX"类型的Bean
问题原因:因为Springboot无法自动识别其他模块下的类,因此需要手动处理,有三种方法:
解决方法一:在对应controller上使用@Import
导入对应的类如:在controller中增加`@Import(TestService.class)`
解决方法二:在
@SpringBootApplication
上增加scanBasePackageClasses
设定即:`@SpringBootApplication(scanBasePackageClasses = {TestService.class})`
解决方法三:在
@SpringBootApplication
上增加scanBasePackage
设定即:`@SpringBootApplication(scanBasePackages = "com.xfather")`
-
Gradle如何打包和测试
测试:
在IDEA右侧Gradle面板中打开待测试项目,依次分别为:Tasks ——> verification ——> test
即可进行测试
打包:
在IDEA右侧Gradle面板中打开待打包项目,依次分别为:Tasks ——> build ——> bootJar
即可进行打包,打包完成后会生成到该项目build/libs
目录下 -
提交git报错:does not have a commit checked out
问题原因:子模块创建时,同时创建了.git隐藏文件夹,导致子模块被识别为独立管理的版本
解决办法:删除子模块下.git文件夹重新提交即可