赞
踩
搭建环境:IDEA 2202.3.2
项目框架:Springboot3.0.2
项目名称:Muhammad
项目结构:Muh-app(子模块:项目启动入口,调取Muh-Design模块资源)、Muh-Design(子模块,设计模块)
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通过该配置构建各模块,并组织模块间的关系
删除src
目录(父级项目不提供代码运行,仅用于模块管理)
.gitignore
、HELP.md
、settings.gradle
build.gradle
配置文件的所有配置信息(子模块的相关配置以后可以在根项目的build.gradle
配置文件中统一管理)src/main/java/com/xfather/muhdesign/MuhDesignApplication.java
和测试启动类src/test/java/com/xfather/muhdesign/MuhDesignApplicationTests.java
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'){ }
settings.gradle
配置文件引入项目引用,增加以下配置
// 此处要按照加载顺序依次配置
include('Muh-design','Muh-app')
Muh-design
模块中创建测试服务com.xfather.muhdesign.service.TestService
public String hello(){
return "Hello,I'm Muh-design";
}
TestService
增加@Service
注解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
注解因为Springboot无法自动识别其他模块下的类,因此需要手动处理,有三种方法:
@Import
导入对应的类@Import(TestService.class)
@SpringBootApplication
上增加scanBasePackageClasses
设定@SpringBootApplication(scanBasePackageClasses = {TestService.class})
@SpringBootApplication
上增加scanBasePackage
设定@SpringBootApplication(scanBasePackages = "com.xfather")
启动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文件夹重新提交即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。