【工程】-一文带你使用Gradle构建SpringBoot微服务项目

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【工程】-一文带你使用Gradle构建SpringBoot微服务项目

微信截图_20220612174009.png

Gradle官方介绍是Build Anything, Automate Everything,Deliver Faster,即构建任何项目,自动化,构建快。


可以明显看到Gradle速度快,显示内容也比较清爽

项目实例

IDEA创建初始项目

so easy..

copy 两个项目,目录结构是这样,这里用1-5标识Gradle配置文件

配置文件详解

1. settings.gradle

/**
 * rootProject.name 项目名称
 * include 模块名称
 */
rootProject.name = 'micro-service-framework'
include 'framework-base'
include 'framework-web'
include 'framework-redis'

2. build.gradle

这个相当于maven中的父maven配置

buildscript {
    ext {
        //spring boot 版本
        bootVersion = '2.0.6.RELEASE'
    }
    //私服地址,这个地址适用于gradle自身,比如删除,下面的springboot插件就会找不到
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    }
    //springboot gradle插件配置
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${bootVersion}")
    }
}
allprojects {
    //导入使用的插件
    apply plugin: 'java'
    apply plugin: 'maven'
    //如果导入该插件,你需要指定main class,否则不能打包
    //apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    //这个插件用于发布jar包到私服
    apply plugin: 'maven-publish'
    //jdk编译版本
    sourceCompatibility = 1.8
    //jar包的group ,version配置
    group 'net.178le.micro'
    version '0.0.1-SNAPSHOT'
    //私服地址,
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    }
    /**
     * 导入了springboot,spring cloud的pom文件,能够免去自己管理版本
     * PS: 在Spring官网指导上面有另外一种配置,那种配置需要配置main class,一会说明
     */
    dependencyManagement {
        imports {
            mavenBom "org.springframework.boot:spring-boot-starter-parent:${bootVersion}"
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.SR2"
        }
    }
    //私服发布配置
    publishing {
        publications {
            maven(MavenPublication) {
                //指定group/artifact/version信息,可以不填。默认使用项目group/name/version作为groupId/artifactId/version
                groupId = project.group
                artifactId = project.name
                version = project.version
                //如果是war包填写components.web,如果是jar包填写components.java
                from components.java
                //配置上传源码
                artifact sourceJar {
                    classifier "src"
                }
            }
        }
        repositories {
            maven {
                def releasesUrl = "http://你的私服ip:8081/repository/maven-releases/"
                def snapshotsUrl = "http://你的私服ip:8081/repository/maven-snapshots/"
                url = version.endsWith('SNAPSHOT') ? snapshotsUrl : releasesUrl
                credentials {
                    username = 'admin'
                    password = 'admin123'
                }
            }
        }
    }
}
//这里的配置对子项目生效
subprojects {
    dependencies {
        testCompile("org.springframework.boot:spring-boot-starter-test")
        compile("com.google.guava:guava:28.0-jre")
    }
}
//打包源码
task sourceJar(type: Jar) {
    from sourceSets.main.allJava
}

maven publish使用

在task -> publishing 中有如下几个命令

我认为使用这两个命令就足够了

publishMavenPublicationToMavenLocal 发布项目到本地仓库

publishMavenPublicationToMavenRepository 发布项目到私服

PS:使用apply plugin: 'org.springframework.boot' build必须要指定main class

23:26:17: Executing task 'build'...
> Task :framework-base:compileJava NO-SOURCE
> Task :framework-base:processResources NO-SOURCE
> Task :framework-base:classes UP-TO-DATE
> Task :framework-base:jar SKIPPED
> Task :framework-redis:compileJava UP-TO-DATE
> Task :framework-redis:processResources NO-SOURCE
> Task :framework-redis:classes UP-TO-DATE
> Task :framework-redis:jar SKIPPED
> Task :framework-web:compileJava UP-TO-DATE
> Task :framework-web:processResources NO-SOURCE
> Task :framework-web:classes UP-TO-DATE
> Task :framework-web:bootJar FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':framework-web:bootJar'.
> Main class name has not been configured and it could not be resolved
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10.3/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 1s
3 actionable tasks: 1 executed, 2 up-to-date
Main class name has not been configured and it could not be resolved
23:26:18: Task execution finished 'build'.

framework-web 项目 3. build.gradle

dependencies {
    //依赖framework-redis项目
    compile project(':framework-redis')
    //不需要写版本
    compile('org.springframework.boot:spring-boot-starter-web')
    //不需要写版本
    compile('org.springframework.cloud:spring-cloud-starter-openfeign')
}

framework-redis 项目 4. build.gradle

dependencies {
    //依赖framework-base
    compile project(':framework-base')
    compile('org.springframework.boot:spring-boot-starter-data-redis')
}

framework-base 5. build.gradle

//做为演示没有引入任何jar包
dependencies {
}


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
12天前
|
消息中间件 监控 网络协议
构建高效微服务通信:选择合适的通信方式
构建高效微服务通信:选择合适的通信方式
|
4天前
|
Java Maven
构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
这篇文章详细介绍了构建SpringBoot项目的过程,包括新建工程、选择环境配置、添加依赖、项目结构说明,并演示了如何编写一个简单的Controller控制器实现输出功能,最后讲解了如何使用Maven将项目打包成可执行的JAR包,并提供了运行JAR包的命令和测试效果。
构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
|
8天前
|
负载均衡 监控 API
构建高效微服务架构:后端开发的新趋势
【7月更文挑战第43天】 在当今软件开发领域,微服务架构已成为推动技术创新与实现业务敏捷性的一股不可忽视的力量。本文旨在深入剖析构建高效微服务架构的核心原则、关键技术和实践挑战,为后端开发者提供一套行之有效的解决方案。通过精心设计的模块化服务、智能的服务发现机制、弹性的负载均衡策略以及持续的性能优化实践,我们能够确保系统的可扩展性、稳定性及快速响应市场变化的能力。文章将详细探讨如何通过容器化技术、服务网格、API网关等现代工具和框架,来构建和维护一个高效的微服务系统。
|
4天前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
12 0
|
4天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
19 0
|
12天前
|
监控 安全 API
构建高效微服务架构:后端开发的新范式
【7月更文挑战第38天】随着现代软件开发的复杂性增加,传统的单体应用架构已经难以满足快速迭代和灵活部署的需求。微服务架构以其模块化、独立性和可伸缩性成为解决这一问题的关键。本文将探讨微服务的核心概念、设计原则以及在实现过程中可能遇到的挑战,并提供相应的解决方案,以期为后端开发者提供一种新的开发范式,帮助他们构建出更加高效、稳定且易于维护的系统。
|
12天前
|
监控 供应链 安全
构建高效微服务架构:API网关与服务熔断策略
【7月更文挑战第38天】随着现代应用程序向微服务架构的转型,系统的稳定性和效率成为了开发团队关注的焦点。本文将探讨在微服务环境中实现系统可靠性的关键组件——API网关,以及如何在服务间通讯时采用熔断机制来防止故障蔓延。通过分析API网关的核心功能和设计原则,并结合熔断策略的最佳实践,我们旨在提供一套提高分布式系统弹性的策略。
|
2天前
|
监控 负载均衡 API
从单体到微服务:架构转型之道
【8月更文挑战第17天】从单体架构到微服务架构的转型是一项复杂而系统的工程,需要综合考虑技术、团队、文化等多个方面的因素。通过合理的规划和实施策略,可以克服转型过程中的挑战,实现系统架构的升级和优化。微服务架构以其高度的模块化、可扩展性和灵活性,为业务的持续发展和创新提供了坚实的技术保障。
|
13天前
|
缓存 监控 API
【微服务战场上的神秘守门人】:揭秘API网关的超能力 —— 探索微服务架构中的终极守护者与它的神奇魔法!
【8月更文挑战第7天】随着微服务架构的流行,企业应用被拆分为围绕特定业务功能构建的小型服务。API网关作为微服务间的通信管理核心,对请求进行路由、认证、限流等处理,简化客户端集成并提升用户体验。以电商应用为例,通过Kong部署API网关,配置产品目录等服务的API及JWT认证插件,确保安全高效的数据交互。这种方式不仅增强了系统的可维护性和扩展性,还提供了额外的安全保障。
31 2
|
20天前
|
负载均衡 监控 API
探索微服务架构中的API网关模式
【7月更文挑战第30天】在微服务架构的复杂网络中,API网关扮演着交通枢纽的角色,不仅简化了客户端与各微服务的交互,还提升了系统的安全性和可维护性。本文将深入探讨API网关的设计原则、核心功能以及在实际应用中的部署策略,旨在为后端开发者提供一套完整的API网关解决方案。