创建项目基本结构
使用idea 创建父工程
编辑 settings.gradle.kts
rootProject.name = "sca-demo"
rootProject.children.forEach { project ->
project.buildFileName = "${project.name}.gradle.kts"
project.children.forEach { pro ->
pro.buildFileName = "${pro.name}.gradle.kts"
}
}
编辑父工程的build.gradle.kts
plugins {
id("java")
id("idea")
id("java-library")
id("org.springframework.boot") version "2.6.13"
id("io.spring.dependency-management") version "1.1.3"
}
group = "com.anbuis.sca"
version = "1.0-SNAPSHOT"
repositories {
mavenLocal()
maven("https://maven.aliyun.com/nexus/content/repositories/google")
maven("https://maven.aliyun.com/nexus/content/groups/public")
maven("https://maven.aliyun.com/nexus/content/repositories/jcenter")
maven("https://plugins.gradle.org/m2/")
mavenCentral()
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
val lombokVersion = "1.18.26"
val springCloudVersion = "2021.0.5"
val springCloudAlibabaVersion = "2021.0.5.0"
val hutoolVersion = "5.8.16"
val knife4jVersion = "4.1.0"
val fastjsonVersion = "2.0.28"
val swaggerAnnotationVersion = "2.2.8"
subprojects {
apply {
plugin("java")
plugin("idea")
plugin("java-library")
plugin("org.springframework.boot")
plugin("io.spring.dependency-management")
}
group = "com.anbuis.shop"
version = "1.0-SNAPSHOT"
repositories {
mavenLocal()
maven("https://maven.aliyun.com/nexus/content/repositories/google")
maven("https://maven.aliyun.com/nexus/content/groups/public")
maven("https://maven.aliyun.com/nexus/content/repositories/jcenter")
maven("https://plugins.gradle.org/m2/")
mavenCentral()
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
springBoot {
buildInfo()
}
// 所有子模块都会有的依赖
dependencies {
// Hutool
implementation("cn.hutool:hutool-all")
// FastJson
implementation("com.alibaba.fastjson2:fastjson2")
// SpringDoc Swagger Annotation
implementation("io.swagger.core.v3:swagger-annotations")
// Junit Test
implementation("org.springframework.boot:spring-boot-starter-test")
// Lombok
compileOnly("org.projectlombok:lombok:${lombokVersion}")
annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
testCompileOnly("org.projectlombok:lombok:${lombokVersion}")
testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}")
}
dependencyManagement {
// 导入SpringCloud和SpringCloudAlibaba对应的依赖
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
mavenBom("com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}")
}
// 定义依赖,后续子模块中就可以不用写版本号
dependencies {
dependency("cn.hutool:hutool-all:${hutoolVersion}")
dependency("com.github.xiaoymin:knife4j-openapi3-spring-boot-starter:${knife4jVersion}")
dependency("com.alibaba.fastjson2:fastjson2:${fastjsonVersion}")
dependency("io.swagger.core.v3:swagger-annotations:${swaggerAnnotationVersion}")
}
}
tasks.jar {
enabled = true
}
tasks.test {
useJUnitPlatform()
}
}
创建子模块
common
公共模块(所有项目都有可能使用的工具,数据结构,异常等)
mvc-config
MVC公共配置模块(所有需要用到MVC的模块使用到的公共配置)
service
微服务模块(微服务模块的父模块)
:service:service-config
微服务通用配置模块(微服务需要使用到的公共配置,如SpringDoc,OpenFeign,Seata,Ribbon,loadbalancer,mybatis-plus,日志收集等)
:service:service-sdk
微服务开发工具包模块(微服务间的请求通讯的服务开发工具集,后续如果会开放的话,可以通过这个jar包进行一个SpringBoot的自动配置)
:service:user-service
用户微服务模块(主要是用户相关服务请求处理)
:service:order-service
订单微服务模块(主要是订单香港服务请求处理)
将子模块添加到 settings.gradle.kts 文件中,类似maven中的
rootProject.name = "sca-demo"
include(
"common",
"mvc-config",
"service",
":service:service-config",
":service:service-sdk",
":service:user-service",
":service:order-service"
)
rootProject.children.forEach { project ->
project.buildFileName = "${project.name}.gradle.kts"
project.children.forEach { pro ->
pro.buildFileName = "${pro.name}.gradle.kts"
}
}
刷新gradle依赖之后,得到的目录结构如下:
以上就是项目前期的基本架构
- Alibaba Spring Cloudspring-cloud-alibaba alibaba spring cloud nacos spring-cloud-starter-alibaba-naco alibaba spring cloud spring-cloud-starter-alibaba-naco s-discovery spring单体alibaba cloud spring-cloud-alibaba alibaba项目spring alibaba spring cloud jdk alibaba spring cloud ipv6 sentinel alibaba spring cloud