先说一下初衷把:为啥突然要用Gradle,公司后期自研项目都使用Gradle构建......

1、下载安装

这个就不说了,网上大家搜索一下,配置一下环境变量即可

2、Groovy的一些语法Gradle任务、文件操作等等,大家感兴趣可以去看看

// TODO 后期补上来

3、使用Gradle创建SpringBoot工程

首先,Gradle中的依赖方式分为三种:

  • 本地依赖:依赖本地的某一个jar包,具体的可通过文件集合、文件树的方式指定
  • 模块依赖:依赖某个project
  • 直接依赖:依赖的类型 依赖的组名 依赖的名称 依赖的版本号
dependencies {
// 本地依赖
implementation files('lib/mysql.jar','lib/junit.jar') // 依赖本地项目下的lib包中的jar文件
implementation fileTree('dir':'lib',includes: ['xxx.jar'],excludes: ['xxx.jar']) // 指定包含某些jar和排除依赖 // 项目依赖
implementation project(':项目的名称') // 直接依赖
implementation 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
implementation group:'org.junit.jupiter',name:'junit-jupiter-engine',version:'5.8.1' // 完整写法 }

其次,Gradle依赖配置有5种方式

  • 1、implementation:会将指定的依赖添加到编译路径,并且会将该依赖打包到输出,如jar中,但是这个依赖在编译时不能暴露给其他模块。一句话:依赖不会传递
  • 2、api:使用api配置的依赖会将对应的依赖添加到编译路径,并将依赖打包输出,但是这个依赖是可以传递的,比如模块A依赖模块B,B依赖库C,模块B在编译时能够访问到库C

注意:api 与 implementation 区别 ===> api 来定义依赖信息是可以进行依赖传递的,而implementation则不会

  • 3、compileOnly:compileOnly修饰的依赖会添加到编译路径中,但是不会打包到jar中,因此只能在编译时访问,且compileOnly修饰的依赖不会传递。
  • 4、runtimeOnly:与compileOnly相反,它修饰的依赖不会添加到编译路径中,但是被打包到jar中,运行时使用。
  • 5、annotationProcessor:这个我也没整明白
1、创建一个工程

2、配置一下IDEA的Gradle构建工具,他默认使用的是wrapper下的gradle。我们改为自己本地安装的

改为本地安装的Gradle

3、在build.gradle文件中加入依赖
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.3' // 定义SpringBoot版本,不单独使用
id 'io.spring.dependency-management' version '1.1.0'
} dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' //省略版本,原生bom支持,插件management提供
......
}
4、测试一下

4、使用Gradle创建SSM多模块工程

1、创建父工程

注意:记得把gradle修改为自己本地安装的gradle

2、一次创建几个子工程

gradle-ssm-api:前台门户端



gradle-ssm-admin:后台管理端

gradle-ssm-service:业务处理层

gradle-ssm-mapper:持久层访问数据库

gradle-ssm-domain:实体类VO,BO,DTO,POJO......

..... 创建过程我就省略了

最终效果:

项目依赖关系:

3、我们先检查gradle-ssm-parent工程的settings.gradle
rootProject.name = 'gradle-ssm-parent'
include 'gradle-ssm-api'
include 'gradle-ssm-admin'
include 'gradle-ssm-service'
include 'gradle-ssm-mapper'
include 'gradle-ssm-domain'
4、再修改gradle-ssm-parent工程的build.gradle
plugins {
id 'java'
} group 'com.qbb'
version '1.0-SNAPSHOT' // 指定仓库位置
repositories {
mavenLocal()
mavenCentral()
} test {
useJUnitPlatform()
} // 指定子工程的共性信息
subprojects {
//添加插件
apply plugin: 'java'
apply plugin: 'java-library'//支持api
//编码环境jdk版本
sourceCompatibility = 17
//编译时jdk版本
targetCompatibility = 17
group 'com.qbb'
version '1.0-SNAPSHOT' /*指定一下字符集,不然打包时有可能会报错*/
//业务编码字符集,注意这是指定源码解码的字符集[编译器]
compileJava.options.encoding "UTF-8"
//测试编码字符集,注意这是指定源码解码的字符集[编译器]
compileTestJava.options.encoding "UTF-8"
//编译JAVA文件时采用UTF-8:注意这是指定源码编码的字符集【源文件】
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
//编译JAVA文件时采用UTF-8:注意这是指定文档编码的字符集【源文件】
tasks.withType(Javadoc) {
options.encoding = "UTF-8"
} //配置外部属性
ext {
spring_version = "5.2.5.RELEASE"
} //依赖的配置
dependencies {
//lombok
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
implementation 'log4j:log4j:1.2.17'
//implementation 'org.slf4j:slf4j-api:1.7.25'
}
test {
useJUnitPlatform()
}
} project("gradle-ssm-domain") {
dependencies {
// implementation 'org.projectlombok:lombok:1.18.24'
// 这里使用api的目的就是为了让lombok依赖可以进行传递,上面我们也说过api和implementation的区别
api 'org.projectlombok:lombok:1.18.24'
}
}
project("gradle-ssm-mapper") {
dependencies {
api project(':gradle-ssm-domain')
api 'org.mybatis:mybatis-spring:2.0.6'
api 'com.alibaba:druid:1.2.8'
api 'org.mybatis:mybatis:3.5.8'
api 'mysql:mysql-connector-java:8.0.30'
}
}
project("gradle-ssm-service") {
dependencies {
api project(':gradle-ssm-mapper')
api 'org.springframework:spring-web:5.2.5.RELEASE'
api 'org.springframework:spring-test:5.2.5.RELEASE'
api 'org.springframework:spring-context:5.2.5.RELEASE'
api 'org.springframework:spring-jdbc:5.2.5.RELEASE'
api 'org.aspectj:aspectjweaver:1.9.8'
}
}
project("gradle-ssm-admin") {
apply plugin: 'war' // 打成war宝
dependencies {
implementation project(':gradle-ssm-service')
implementation 'org.springframework:spring-webmvc:5.2.5.RELEASE'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
implementation "com.fasterxml.jackson.core:jackson-core:2.12.3"
compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
implementation 'jstl:jstl:1.2'
}
}
project("gradle-ssm-api") {
apply plugin: 'war'
dependencies {
//implementation project(':gradle-ssm-domain')
implementation project(':gradle-ssm-service')
implementation 'org.springframework:spring-webmvc:5.2.5.RELEASE'
implementation "com.fasterxml.jackson.core:jackson-databind:2.12.3"
implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
implementation "com.fasterxml.jackson.core:jackson-core:2.12.3"
implementation 'jstl:jstl:1.2'
}
}
5、编写测试类进行测试 (代码比较简单,我直接放在后面的代码仓库了

clear -> build -> 配置本地的tomcat

注意:我这里用的是JDK17所以相关的版本也是试错过得,大家JDK如果不是17,需要注意Spring的版本。不然构建会报错的

Unsupported class file major version 61

到这本以为全部ok了,但是有一个大坑......我替大家踩了!我在发请求的时候后台查询数据库没问题,但是前台一致报错500...

解决办法:参考Gradle打包lombok不生效

6、看着好像是完成了,但是还不够还!这个日期时间我们变成了时间戳,我不喜欢

数据库中的:

我修改了一下build.gradle依赖信息

plugins {
id 'java'
} group 'com.qbb'
version '1.0-SNAPSHOT' // 指定仓库位置
repositories {
mavenLocal()
mavenCentral()
} test {
useJUnitPlatform()
} // 指定子工程的共性信息
subprojects {
//添加插件
apply plugin: 'java'
apply plugin: 'java-library'//支持api
//编码环境jdk版本
sourceCompatibility = 17
//编译时jdk版本
targetCompatibility = 17
group 'com.qbb'
version '1.0-SNAPSHOT' /*指定一下字符集,不然打包时有可能会报错*/
//业务编码字符集,注意这是指定源码解码的字符集[编译器]
compileJava.options.encoding "UTF-8"
//测试编码字符集,注意这是指定源码解码的字符集[编译器]
compileTestJava.options.encoding "UTF-8"
//编译JAVA文件时采用UTF-8:注意这是指定源码编码的字符集【源文件】
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
//编译JAVA文件时采用UTF-8:注意这是指定文档编码的字符集【源文件】
tasks.withType(Javadoc) {
options.encoding = "UTF-8"
} //配置外部属性
ext {
spring_version = "5.3.22"
} //依赖的配置
dependencies {
//lombok
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
implementation 'log4j:log4j:1.2.17'
//implementation 'org.slf4j:slf4j-api:1.7.25'
}
test {
useJUnitPlatform()
}
} project("gradle-ssm-domain") {
dependencies {
// implementation 'org.projectlombok:lombok:1.18.24'
// 这里使用api的目的就是为了让lombok依赖可以进行传递,上面我们也说过api和implementation的区别
// api 'org.projectlombok:lombok:1.18.24' // 解决Gradle打包后lombok不生效
api 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24' // 在domain层加入,后续依赖domain的模块可继续使用
api 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
api "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
api "com.fasterxml.jackson.core:jackson-core:2.12.3"
}
}
project("gradle-ssm-mapper") {
dependencies {
api project(':gradle-ssm-domain')
api 'org.mybatis:mybatis-spring:2.0.6'
api 'com.alibaba:druid:1.2.8'
api 'org.mybatis:mybatis:3.5.8'
api 'mysql:mysql-connector-java:8.0.30'
}
}
project("gradle-ssm-service") {
dependencies {
api project(':gradle-ssm-mapper')
api 'org.springframework:spring-web:5.3.22'
api 'org.springframework:spring-test:5.3.22'
api 'org.springframework:spring-context:5.3.22'
api 'org.springframework:spring-jdbc:5.3.22'
api 'org.aspectj:aspectjweaver:1.9.8'
}
}
project("gradle-ssm-admin") {
apply plugin: 'war' // 打成war宝
dependencies {
implementation project(':gradle-ssm-service')
implementation 'org.springframework:spring-webmvc:5.3.22'
// implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
// implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
// implementation "com.fasterxml.jackson.core:jackson-core:2.12.3"
compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
implementation 'jstl:jstl:1.2'
}
}
project("gradle-ssm-api") {
apply plugin: 'war'
dependencies {
//implementation project(':gradle-ssm-domain')
implementation project(':gradle-ssm-service')
implementation 'org.springframework:spring-webmvc:5.3.22'
// implementation "com.fasterxml.jackson.core:jackson-databind:2.12.3"
// implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
// implementation "com.fasterxml.jackson.core:jackson-core:2.12.3"
implementation 'jstl:jstl:1.2'
}
}

在实体类上序列化一下

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;

本以为大功告成,结果又报了这个错

03-Dec-2022 17:59:42.295 涓ラ噸 [http-nio-8080-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke 鍦ㄨ矾寰勪负/ssm鐨勪笂涓嬫枃涓紝Servlet[DispatcherServlet]鐨凷ervlet.service锛堬級寮曞彂浜嗗叿鏈夋牴鏈師鍥犵殑寮傚父Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class java.time.LocalDateTime]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: java.util.ArrayList[0]->com.qbb.User["createTime"])
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: java.util.ArrayList[0]->com.qbb.User["createTime"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276)
at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145)
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:400)
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1510)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:456)
at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:135)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:670)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)

解决办法:加入一个依赖就好了

project("gradle-ssm-domain") {
dependencies {
......
// 解决 Java 8 date/time type `java.time.LocalDateTime` not supported
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.0'
......
}
}

至此Gradle构建SSM多模块项目完成;代码仓库

5、使用Gradle创建微服务多模块工程

1、先准备两个表

user表:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` tinyint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
`password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
`nick_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '昵称',
`email` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮箱',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `user_id_uindex`(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'qbb', '111111', '秋秋', 'qiuqiu@163.com', '2022-10-25 21:36:42', '2022-10-25 21:36:44');
INSERT INTO `user` VALUES (2, 'll', '555555', 'll', 'll@163.com', '2022-10-25 21:37:06', '2022-10-25 21:37:07'); SET FOREIGN_KEY_CHECKS = 1;

addr表:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for addr
-- ----------------------------
DROP TABLE IF EXISTS `addr`;
CREATE TABLE `addr` (
`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT,
`uid` int(0) NULL DEFAULT NULL COMMENT '用户id',
`province` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '省份',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of addr
-- ----------------------------
INSERT INTO `addr` VALUES (1, 1, '海南省');
INSERT INTO `addr` VALUES (2, 2, '湖北省'); SET FOREIGN_KEY_CHECKS = 1;
2、创建项目

3、添加依赖
description '使用Gradle创建微服务多模块工程'

//构建Gradle脚本自身需要的资源,可以声明的资源包括依赖项、第三方插件、maven仓库地址等。
buildscript {
ext {
springBootVersion = '2.2.1.RELEASE'
springCloudVersion = 'Hoxton.RELEASE'
springCloudAlibabaVersion = '0.2.2.RELEASE'
} //设置仓库
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://repo.spring.io/milestone'}
} dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
} //配置全局, 包括root项目和子项目
allprojects {
group 'com.qbb'
version '1.0-SNAPSHOT' //配置编码格式
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
} //设置仓库
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://repo.spring.io/milestone'}
} } // 引入version.gradle文件,做了版本控制
apply from: 'version.gradle' //配置所有子项目
subprojects { apply plugin: 'java'
apply plugin: 'java-library' // api
apply plugin: 'io.spring.dependency-management' sourceCompatibility= JavaVersion.VERSION_1_8
targetCompatibility= JavaVersion.VERSION_1_8 //公用的依赖
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
} test {
useJUnitPlatform()
} // dependencyManagement版本统一管理,类似于父maven的dependencyManagement
dependencyManagement {
dependencies {
for(depJar in rootProject.ext.dependencies){
dependency depJar.value
}
}
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom "org.springframework.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}"
}
}
} project(':gradle-microservice-domain'){
description("bean层:存放表对应的实体类")
dependencies {
implementation 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
implementation "com.fasterxml.jackson.core:jackson-core:2.12.3"
}
} project(":gradle-microservice-common"){
description("公共模块:存放微服务常用的工具类")
//依赖
dependencies {
api 'com.alibaba:fastjson'
api 'mysql:mysql-connector-java'
api 'com.baomidou:mybatis-plus-boot-starter'
api 'io.springfox:springfox-swagger2'
api 'io.springfox:springfox-swagger-ui'
api 'io.jsonwebtoken:jjwt' api 'org.springframework.cloud:spring-cloud-starter-openfeign'
api 'org.springframework.cloud:spring-cloud-starter-alibaba-sentinel'
api 'org.springframework.cloud:spring-cloud-starter-alibaba-nacos-discovery' }
} project(":gradle-microservice-service"){
description("服务模块:存放各个微服务模块")
apply plugin: 'org.springframework.boot' subprojects {
apply plugin : 'java-library'
apply plugin: 'org.springframework.boot' dependencies {
api 'org.springframework.boot:spring-boot-starter-web'
api project(':gradle-microservice-domain')
api project(':gradle-microservice-common')
}
} }
4、编写基本的业务逻辑(这里大家可以直接参考我的代码)
5、测试一下

先看看nacos注册中心

在测试一下远程调用

至此Gradle构建多模块微服务项目完结~~

友情提示:案例代码仓库

Gradle构建微服务项目的更多相关文章

  1. K8S+Jenkins自动化构建微服务项目(后续)

    因为之前写过基于K8S部署jenkins master/slave平台,在这个的基础上构建微服务到K8S集群中 Jenkins-slave构建微服务项目到K8S集群 1.微服务项目上传到git仓库 这 ...

  2. .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心

    一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...

  3. .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证

    这里第一次搭建,所以IdentityServer端比较简单,后期再进行完善. 1.新建API项目MI.Service.Identity,NuGet引用IdentityServer4,添加类InMemo ...

  4. 使用http://start.spring.io/构建maven微服务项目的几个坑及eclipse构建spring boot微服务项目

    一,使用http://start.spring.io/构建maven微服务项目 本来嘛,直接构建的项目导入时没有任何问题的导入就可以运行,可是最近构建好项目,然后导入,种种报错 1.导入之后POM报错 ...

  5. 构建微服务开发环境7————使用Github管理项目代码的版本

    [内容指引] 1.注册GitHub帐号: 2.下载Github Desktop客户端: 3.macOS安装Github Desktop客户端: 4.windows安装Github Desktop客户端 ...

  6. 构建微服务-使用OAuth 2.0保护API接口

    微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...

  7. 构建微服务:Spring boot

    构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...

  8. 如何使用 Java 构建微服务?

    [编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...

  9. 基于Spring Cloud和Netflix OSS构建微服务,Part 2

    在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...

  10. SpringCloud(1)---基于RestTemplate微服务项目案例

    基于RestTemplate微服务项目 在写SpringCloud搭建微服务之前,我想先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间额通讯.然后在此基础上 ...

随机推荐

  1. Shiro配置类中的各个配置项浅谈

    背景: 上文中在落地实践时,对Shiro进行了相关的配置,并未对其含义作用进行详细学习,本章将进一步详解其作用含义. Shiro配置类中的各个配置项的作用: @Bean public Security ...

  2. 【Python进阶-PyQt5】00PyQt5简介

    0.图形用户界面-开发选择 在Python基础的教程中,我们程序的用户交互界面都是运行窗口.这个运行窗口对于我们编程者来说直观明了,但是对于一些相对复杂的程序,用户使用上就会变得十分麻烦.所以,我们要 ...

  3. from itertools import groupby

    需求:期望由 a 得到 b 实现方法: from itertools import groupby a = [ {'name': 'a', 'value': 1}, {'name': 'b', 'va ...

  4. Python 设置环境变量方法

    Python中的os模块 Python中的os模块提供了很多与操作系统相关的功能.其中就包括设置环境变量的方法,即setenv()方法. 使用os.setenv()方法设置环境变量 import os ...

  5. EXE一机一码加密大师1.3.0更新

    EXE一机一码打包加密大师可以打包加密保护EXE文件,同时给EXE文件添加上一机一码认证,或者静态密码,不同的电脑打开加密后的文件需要输入不同的激活码才能正常使用,保护文件安全,方便向用户收费. 1. ...

  6. Skynet:Debug Console的扩展

    起因 最近上线服务器遇到了一些问题,上个月CPU暴涨的问题,那个经查验是死循环导致endless loop了. 这周又遇到了mem占用达到96%的问题,在debug console里调用了gc之后,跌 ...

  7. 一款广受社区好评的 WAF

    大家好,我是 Java陈序员,我们有时会搭建一个属于自己的网站,但是自建网站很容易被收到攻击,今天给大家介绍一款简单免费好用的 WAF 网站防护工具. WAF 是 Web Application Fi ...

  8. 「codeforces - 1633F」Perfect Matching

    link. 首先所有的 activated nodes 组合成了一棵以 \(1\) 为根的有根树.询问即求由 activated nodes 组成的树的最大匹配.对于树上最大匹配有一个贪心策略:自底向 ...

  9. maven缺失ojdbc6解决方法(手动安装ojdbc6)

    maven缺失ojdbc6解决方法(手动安装ojdbc6) 1. 首先下载ojdbc6jar包 jar下载地址一(需登录) jar下载地址二(直接下载) 2. 进入到jar包所在文件夹,执行cmd命令 ...

  10. 如何使用Java创建数据透视表并导出为PDF

    摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 数据透视分析是一种强大的工具,可以帮助我们从大量数据中提取有用信 ...