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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【工程】-一文带你使用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
相关文章
|
16天前
|
运维 监控 Java
为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案
本文记录并复盘了生产环境中Spring Boot应用内存占用过高的问题及解决过程。系统上线初期运行正常,但随着业务量上升,多个Spring Boot应用共占用了64G内存中的大部分,导致应用假死。通过jps和jmap工具排查发现,原因是运维人员未设置JVM参数,导致默认配置下每个应用占用近12G内存。最终通过调整JVM参数、优化堆内存大小等措施解决了问题。建议在生产环境中合理设置JVM参数,避免资源浪费和性能问题。
46 3
|
26天前
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
35 3
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
144 5
|
2月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
60 1
|
2月前
|
Java
SpringBoot构建Bean(RedisConfig + RestTemplateConfig)
SpringBoot构建Bean(RedisConfig + RestTemplateConfig)
49 2
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
132 2
|
2月前
|
XML 存储 Java
SpringBoot集成Flowable:构建强大的工作流引擎
在企业级应用开发中,工作流管理是核心功能之一。Flowable是一个开源的工作流引擎,它提供了BPMN 2.0规范的实现,并且与SpringBoot框架完美集成。本文将探讨如何使用SpringBoot和Flowable构建一个强大的工作流引擎,并分享一些实践技巧。
229 0
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
152 6
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
57 1
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
170 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型