# todocoder-gradle **Repository Path**: todocoder/todocoder-gradle ## Basic Information - **Project Name**: todocoder-gradle - **Description**: 使用IntelliJ IDEA创建Spring Boot项目并通过Gradle进行配置和依赖实现的流程。同时,还详细讲解了如何使用Docker进行部署和一键部署的方法。此外,还介绍了如何使用Kubernetes进行部署和测试。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-08-23 - **Last Updated**: 2024-01-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 使用说明   大家好,我是Coder哥,最近比较忙,在做新的项目,之前一直用的 jdk 1.8 + maven 的方式构建的项目,虽然还是用的Java,但是全套都换新了,java 升级到17,项目构建也换成了gradle 7.4,打包镜像及发布两套环境 Docker+k8s,本篇文章比较全面,建议收藏!   俗话说万事开头难,网上教程也很多,但大多都不是很全面,这次基于公司的项目来总结一下整体的构建流程,包括,gradle项目的创建,依赖管理,jar包的生成,gradle Task 自定义jar目录, dockerfile 编写,docker 运行发布,k8s springboot项目yaml编写及k8s部署,对于初学者来讲,能少走18个弯路。绝对是纯干货。 我们从以下几个步骤来看,如果都会直接退出返回就行,**如果觉得有帮助记得帮忙点个赞!!!或者收藏一下回头用上的时候再看,^_^** **一、环境信息** **二、IntelliJ IDEA 创建springboot+gradle项目及启动流程** 1. IntelliJ IDEA 创建gradle项目 2. Springboot Gradle 配置&依赖实现 3. 运行&测试 4. Gradle 配置打包 **三、基于Docker部署** 1. Dockerfile编写及镜像打包 2. 一键部署 **四、基于k8s部署** 1. yaml文件编写 2. k8s部署&测试 **五、总结** ## 一、环境信息 | 软件 | 版本 | | :------------ | -------- | | MacOS | 11.6 | | IntelliJ IDEA | 2023.1.1 | | JDK | 17.0.3 | | Gradle | 7.4 | | Springboot | 3.0.1 | | Docker | 19.03.13 | 以上是本次安装的所有涉及到的环境及版本信息 > 温馨提示: > > **建议JDK,Gradle,Springboot 这三个保持一致,避免版本不兼容的问题** > 其他的软件版本无需关注 ## 二、Springboot+gradle项目的创建及启动流程 ### 1.创建gradle项目 1. 打开 `IDEA` 2. 菜单选择 `File > New > Project...` 3. 然后选择`Gradle`和`SDK`版本,以及`Java`库,如下: ![](images/gradle1.png) 4. 查看项目目录结构及版本信息 ![](images/gradle2.png) 创建完项目了,`IDEA`帮我们自动创建了3个文件:`gradle-wrapper.properties`、`build.gradle`和`settings.gradle`; **gradle-wrapper.properties:** 用来进行gradle版本控制的 **build.gradle:** 这个文件是项目的gradle文件,里面可以添加依赖包,或者写一些自定义的任务脚本等。 **settings.gradle:** 这个文件可以控制多module ### 2.Springboot Gradle 配置&依赖实现 如果我们想构建一个springboot项目,需要配置springboot的相关依赖,通过上面的文件介绍我们可以知道,这些依赖是在 `build.gradle` 中来配置,内容如下: ```groovy plugins { // springboot 插件及版本 id 'org.springframework.boot' version '3.0.1' id 'java' } allprojects { ext { springVersion = '3.0.1' } } // 设置编码格式 tasks.withType(JavaCompile) { options.encoding = "UTF-8" } group = 'com.todocoder.gradle' version = '1.0-SNAPSHOT' //编译后的.class文件的jdk版本 sourceCompatibility = 17 //项目运行版本 targetCompatibility = 17 /* * 指定所使用的仓库 */ repositories { // Gradle没有自己的中央仓库 // 先从本地maven仓库寻找依赖的jar包,存在则直接使用本地maven仓库的jar mavenLocal() // 本地maven仓库没有则从远程仓库下载jar包,并保存到 环境变量GRADLE_USER_HOME 配置的路径下 // 设置maven仓库阿里镜像地址 maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } // 配置使用Maven的中央仓库 mavenCentral() } dependencies { // springboot web starter implementation "org.springframework.boot:spring-boot-starter-web:${springVersion}" testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() } ``` > 上面是可以运行起来springboot的最小配置 ### 3. 运行&测试 1. 基于上面的配置我们简单的写个接口测试一下 代码如下图,从左到右依次是 `配置文件`、`Springboot启动入口类`、`Controller` ![](images/gradle3.png) 2. 在主类main函数上点击右键 -> 启动,或者直接在类上点击右键找到运行选项 ![](images/gradle4.png) 看到如下的日志,表示启动成功,端口号是8080. 3. 调用接口测试 ```shell # http://127.0.0.1:8080/api/todocoder/helloword curl -XGET http://127.0.0.1:8080/api/todocoder/helloword -H "Content-Type: application/json" helloword ``` 可以看到,输出了结果,上面是简单的一个接口。 ### 4. Gradle 配置打包 那么接口代码都写完了,就需要打包发布了,来看一下最基本的build命令。 1. 默认打包命令 bootJar 运行 `./gradlew bootJar` 后,在项目目录下会有个 `./build/libs` 目录,jar包在这个目录下,名字是 `todocoder-gradle-1.0-SNAPSHOT.jar`,如图 ![](images/gradle5.png) > bootJar 是springboot插件提供的打包springboot项目的命令 2. 自定义打包命令 如果我们不想用这个版本号,我们想换个名字,换个目录要怎么编写脚本呢? 比如: 我想打包到 项目目录下的 `app/` 目录下,名字是 `${projectName}.jar`,可以在 `build.gradle`文件下添加如下打包脚本: ```groovy def jarname = String.format("%s-%s.jar",project.name,version) // 拷贝文件 dependsOn: bootJar 依赖springboot 插件的 bootJar打包命令 task copyConfigFile(type: Copy, dependsOn: bootJar) { // 清除app目录的历史文件 delete "app/" // copy jar包 从 build/libs/ 目录到 app/ 目录 from('build/libs/' + jarname) into 'app/' // 重命名成我们要的名字 rename(jarname, project.name + '.jar') } // 依赖 clean 任务 task buildTodoCoderJar(dependsOn: clean) { dependsOn copyConfigFile } ``` 如上脚本,我们先清除一下目录 -> copy jar包到目标目录 -> 重命名jar 运行打包命令: ```shell # 后面的 task是我们上面自定义的任务名 ./gradlew buildTodoCoderJar ``` ![](images/gradle6.png) 可以看到,重命名后的jar包,已经复制到 `app/` 目录下面了。 上面我们 `创建项目 -> 编写接口 -> 运行项目 -> 测试接口 -> 打包项目 ` 开发期的流程已经打通了,那么我们开发完成后需要发布,我们下面把项目发布到 ## 三、基于Docker部署 ### 1. Dockerfile编写及镜像打包 dockerfile如下: ```dockerfile # jre 17 的镜像 FROM todocoder/jre:17 MAINTAINER todocoder WORKDIR /todocoder # jvm启动参数 ENV APP_ARGS="-XX:+UseG1GC -Xms1024m -Xmx1024m -Xss256k -XX:MetaspaceSize=128m" ADD app/todocoder-gradle.jar /todocoder/app.jar # 镜像启动后运行的脚本 ENTRYPOINT ["java","-jar","/todocoder/app.jar","${APP_ARGS}","--spring.profiles.active=dev","-c"] ``` Docker run ```shell docker run -d -p 8080:8080 todocoder/todocoder-gradle:v1.0.0 --name=todocoder-gradle ``` ### 2. 一键打包部署 在项目根目录下创建个`build.sh`,内容如下: ```shell #!/bin/bash # 打jar包 ./gradlew buildTodoCoderJar # 构建docker镜像 docker build -t todocoder/todocoder-gradle:v1.0.0 . # 运行镜像 docker run --name=todocoder-gradle -d -p 8080:8080 todocoder/todocoder-gradle:v1.0.0 ``` 直接执行命令 :`bash build.sh` 查看 `docker ps | grep gradle`, 并测试接口 ![](images/gradle7.png) ```shell curl -XGET http://127.0.0.1:8080/api/todocoder/helloword -H "Content-Type: application/json" helloword ``` ## 四、基于k8s部署 在k8s中部署,首先得写个deployment的yaml文件,然后部署 ### 1. yaml文件编写 这里有四个yaml,分别是 创建namespace,创建deployment, 创建两个service(这两个的区别一个是内部集群IP访问,一个暴露了NodePort端口用来外部访问),具体用的话根据你自己的环境修改一下 ```yaml cat < 编写接口 -> 运行项目 -> 测试接口 -> 打包项目 ` 流程,到**运维部署** `dockerfile编写&Docker发布 -> k8s yaml编写 -> k8s部署`,除了你们公司业务的代码没写,其他的一应俱全,虽然也不是什么高难度的东西,但是也能让各位避免走很多没必要的弯路,后面也会基于此项目把一些常见的业务功能以文章的方式记录下来,欢迎大家关注。 感谢各位能看到这里,觉得文章有用的话记得关注一下,别忘了点赞收藏哦,最后打个小广告 > 微信工号搜: TodoCoder > > 会不定时分享 Java,Go,Docker,k8s等 技术文章,公号无广告,无推荐,纯分享