文章目录

  • 创建Gradle项目
    • dependencies.gradle
    • gradle.properties
    • build.gradle
  • Gradle配置文件详解
    • dependency-management 插件
    • SpringBootPlugin 插件
  • 多模块
  • 热部署

创建Gradle项目


dependencies.gradle

ext.versions = [    // 定义所有要使用的版本号springboot:     '2.4.1' // SpringBoot版本号
]
ext.libraries = [   // 定义所有的依赖库'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}"
]

gradle.properties

project_group=com.wyy
project_version=1.0.0
project_jdk=8

build.gradle

buildscript {                        // 定义脚本使用资源apply from: 'dependencies.gradle' // 引入所需要的依赖库文件repositories {                         // 脚本资源仓库maven { url 'https://maven.aliyun.com/repository/public' }}dependencies {                        // 依赖库classpath libraries.'spring-boot-gradle-plugin'}
}group project_group
version project_version
apply from: 'dependencies.gradle' // 引入所需要的依赖库文件
def env = System.getProperty("env") ?: 'dev' // 获取env环境属性subprojects {   // 子模块apply plugin: 'java' // 引入之前的插件apply plugin: 'org.springframework.boot' // 引入之前的插件apply plugin: 'io.spring.dependency-management' // 引入之前的插件sourceCompatibility = project_jdk // 本次项目都是基于JDK-8版本编写的targetCompatibility = project_jdk // 本次项目都是基于JDK-8版本编写的repositories {  // 配置Gradle仓库def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'all {ArtifactRepository repo ->if (repo instanceof MavenArtifactRepository) {def url = repo.url.toString()if (url.startsWith('https://repo1.maven.org/maven2')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."remove repo}if (url.startsWith('https://jcenter.bintray.com/')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."remove repo}}}maven { url ALIYUN_REPOSITORY_URL } // 设置阿里云仓库maven { url ALIYUN_JCENTER_URL } // 设置阿里云仓库}dependencies {  // 公共依赖库管理compile('org.springframework.boot:spring-boot-devtools') // 允许进行项目的热部署}sourceSets {    // 源代码目录配置main { // main及相关子目录配置java { srcDirs = ['src/main/java'] }resources { srcDirs = ['src/main/resources', "src/main/profiles/$env"] }}test { // test及相关子目录配置java { srcDirs = ['src/test/java'] }resources { srcDirs = ['src/test/resources'] }}}test {  // 配置测试任务useJUnitPlatform() // 使用JUnit测试平台}// 最终生成的jar文件名称:baseName-version-classifier.extensiontask sourceJar(type: Jar, dependsOn: classes) { // 源代码的打包任务archiveClassifier = 'sources' // 设置文件的后缀from sourceSets.main.allSource // 所有源代码的读取路径}task javadocTask(type: Javadoc) { // JavaDoc文档打包任务options.encoding = 'UTF-8' // 设置文件编码source = sourceSets.main.allJava // 定义所有的Java源代码}task javadocJar(type: Jar, dependsOn: javadocTask) { // 先生成JavaDoc再打包archiveClassifier = 'javadoc' // 文件标记类型from javadocTask.destinationDir // 通过JavadocTask任务中找到目标路径}tasks.withType(Javadoc) {   // 文档编码配置options.encoding = 'UTF-8' // 定义编码}tasks.withType(JavaCompile) {   // 编译编码配置options.encoding = 'UTF-8' // 定义编码}artifacts { // 最终的打包的操作任务archives sourceJar // 源代码打包archives javadocJar // javadoc打包}gradle.taskGraph.whenReady {    // 在所有的操作准备好后触发tasks.each { task ->    // 找出所有的任务if (task.name.contains('test')) {   // 如果现在发现有test任务// 如果将enabled设置为true表示要执行测试任务,如果设置为false表示不执行测试任务task.enabled = true}}}[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8' // 编码配置
}
project('microboot-web') { // 子模块dependencies { // 配置子模块依赖compile(project(':microboot-common')) // 引入其他子模块compile('org.springframework.boot:spring-boot-starter-web') // 引入SpringBoot依赖}
}
project('microboot-common') { // 子模块dependencies {} // 配置子模块依赖
}

在 公共子模块 的 build.gradle 中添加如下配置

jar { enabled = true} // 允许打包为jar文件
bootJar { enabled = false } // 不允许打包为Boot执行文件
javadocTask { enabled = false } // 不需要打包为doc文件

Gradle仓库 也可以这样

repositories {                // 配置Gradle仓库mavenLocal()maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }mavenCentral()jcenter()}

可以在 subprojects {} 子模块中加入 版本控制插件

dependencyManagement {// 版本控制插件imports {mavenBom libraries.'spring-cloud-dependencies' // SpringCloud依赖管理mavenBom libraries.'spring-cloud-alibaba-dependencies' // SpringCloudAlibaba依赖管理}}

公共依赖库管理 ( 但是需要在 dependencies.gradle 中加入 JUnit 和 lombok 依赖 )

dependencies {                // 公共依赖库管理compile('org.springframework.boot:spring-boot-devtools') // 项目热部署// 以下为测试环境的相关依赖配置testImplementation('org.springframework.boot:spring-boot-starter-test') {exclude group: 'junit', module: 'junit' // 移除Junit4}testImplementation(enforcedPlatform(libraries.'junit-bom')) // 绑定为JUnit5运行testImplementation(libraries.'junit-platform-commons') // Junit5测试组件testImplementation(libraries.'junit-platform-engine') // Junit5测试组件testImplementation(libraries.'junit-jupiter-api') // Junit5测试组件testImplementation(libraries.'junit-vintage-engine') // Junit5测试组件testImplementation(libraries.'junit-jupiter-engine') // Junit5测试组件testImplementation(libraries.'junit-platform-launcher') // Junit5测试组件// 以下为Lombok插件的相关依赖配置compileOnly(libraries.'lombok') // 编译时生效annotationProcessor(libraries.'lombok') // 注解时生效}

上面为多模块开发,单模块时的 build.gradle ( 去掉subprojects {} ,但是保留里面配置项,repositories{} 有多种写法,dependencies{}中配置就不再是公共模块配置,而只是此依赖项 )

Gradle配置文件详解

初始

版本号

仓库

版本号管理

dependency-management 插件

但是如果采用的是此类的配置方式就会存在有一个比较麻烦的问题,因为在SpringBoot里面要引入的相关的
starters依赖库是非常多的(SpringBoot官方文档告诉大家的),就可能该变量会被引用无数次,这样的项目结构管理有些重复了,所以如果要想解决这个重复的SpringBoot-Xxx-Starter-Xxx依赖库的版本配置问题,那么最佳的做法就可以考虑引入一些插件

1、 【Maven 仓库】通过 Maven的中央仓库查询插件当前的版本号:

implementation group: 'io.spring.dependency-management", name: 'io.spring.dependency-management.gradle.plugin', version: '1.0.11.RELEASE', ext: 'pom'

2、【firstboot项目】修改build.gradle配置文件,设置插件的引用:

此时

可以去掉版本号

此时没有在项目之中引入依赖库的位置上继续进行版本号的定义,而是在顶部将所有的版本号都固定好了。

虽然这个时候已经合理的搭建了一个SpringBoot项目,但是依然有的同学会认为这样手工的配置形式实在是过于繁琐了,所以可以考虑直接利用Spring所给出的官方构建工具完成: start.spring.io

引入dependency-management 插件后,gradle会增加一些命令

此时存在有了一个bootJar任务,这个任务就是让当前的项目以SpringBoot方式运行: gradle bootRun,下面通过命令行的方式来基于此命令实现SpringBoot的运行:

在SpringBoot项目开发完成之后肯定要进行项目的打包处理,而在进行打包处理的时候,往往采用的默认命令: gradlebuild,但是在引入了SpringBoot 插件之后SpringBoot提供了一个默认的“bootJar”打包任务,所以就希望可以将build任务(iar任务)与bootRun (bootlar)合并在一起,既然有这样的要求,就可以考虑通过一个专属的插件来完成

SpringBootPlugin 插件

在配置文件最上方引入插件,并删掉此部分

加入这两个插件

修改写法

现在所有与SpringBoot有关的版本编号统一都交给了“spring-boot-gradle-plugin”来定义了,而后相关的任务也会自动的进行关联。

多模块

1、【IDEA工具】创建一个新的Gradle项目:microboot

2.【microboot项目】修改gradle.properties资源文件配置相关的项目属性:

3、【microboot项目】创建“dependecies.gradle”文件,这个文件实现所有项目之中依赖库版本的定义:

4、【microboot项目】修改build.gradle配置文件,引入相关的子配置文件:

改为

改 group、version、引入依赖库文件、配置子模块、env 是配合源代码测试和任务相关环境使用

子模块配置

subprojects {   // 子模块apply plugin: 'java' // 引入之前的插件apply plugin: 'org.springframework.boot' // 引入之前的插件apply plugin: 'io.spring.dependency-management' // 引入之前的插件sourceCompatibility = project_jdk // 本次项目都是基于JDK-11版本编写的targetCompatibility = project_jdk // 本次项目都是基于JDK-11版本编写的repositories {  // 配置Gradle仓库def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'all {ArtifactRepository repo ->if (repo instanceof MavenArtifactRepository) {def url = repo.url.toString()if (url.startsWith('https://repo1.maven.org/maven2')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."remove repo}if (url.startsWith('https://jcenter.bintray.com/')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."remove repo}}}maven { url ALIYUN_REPOSITORY_URL } // 设置阿里云仓库maven { url ALIYUN_JCENTER_URL } // 设置阿里云仓库}dependencies {  // 公共依赖库管理}sourceSets {    // 源代码目录配置main { // main及相关子目录配置java { srcDirs = ['src/main/java'] }resources { srcDirs = ['src/main/resources', "src/main/profiles/$env"] }}test { // test及相关子目录配置java { srcDirs = ['src/test/java'] }resources { srcDirs = ['src/test/resources'] }}}test {  // 配置测试任务useJUnitPlatform() // 使用JUnit测试平台}// 最终生成的jar文件名称:baseName-version-classifier.extensiontask sourceJar(type: Jar, dependsOn: classes) { // 源代码的打包任务archiveClassifier = 'sources' // 设置文件的后缀from sourceSets.main.allSource // 所有源代码的读取路径}task javadocTask(type: Javadoc) { // JavaDoc文档打包任务options.encoding = 'UTF-8' // 设置文件编码source = sourceSets.main.allJava // 定义所有的Java源代码}task javadocJar(type: Jar, dependsOn: javadocTask) { // 先生成JavaDoc再打包archiveClassifier = 'javadoc' // 文件标记类型from javadocTask.destinationDir // 通过JavadocTask任务中找到目标路径}tasks.withType(Javadoc) {   // 文档编码配置options.encoding = 'UTF-8' // 定义编码}tasks.withType(JavaCompile) {   // 编译编码配置options.encoding = 'UTF-8' // 定义编码}artifacts { // 最终的打包的操作任务archives sourceJar // 源代码打包archives javadocJar // javadoc打包}gradle.taskGraph.whenReady {    // 在所有的操作准备好后触发tasks.each { task ->    // 找出所有的任务if (task.name.contains('test')) {   // 如果现在发现有test任务// 如果将enabled设置为true表示要执行测试任务,如果设置为false表示不执行测试任务task.enabled = true}}}[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8' // 编码配置
}

5、【microboot项目】创建一个“microboot-common”子模块,这是一个公共的模块,用于定义一些公共的程序类

在 公共子模块 的 build.gradle 中添加如下配置

jar { enabled = true} // 允许打包为jar文件
bootJar { enabled = false } // 不允许打包为Boot执行文件
javadocTask { enabled = false } // 不需要打包为doc文件

6、【microboot项目】创建一个“microboot-web”子模块,这个模块主要引用“microboot-common”子模块,并且实现WEB程序的开发

7、【microboot项目】修改build.gradle配置文件,进行子模块的定义

project('microboot-web') { // 子模块dependencies { // 配置子模块依赖compile(project(':microboot-common')) // 引入其他子模块compile('org.springframework.boot:spring-boot-starter-web') // 引入SpringBoot依赖}
}
project('microboot-common') { // 子模块dependencies {} // 配置子模块依赖
}

热部署

在进行java项目开发过程之中,最痛苦的一件事情就是每次修改之后都需要重新启动应用程序,所以此时就会感觉到非常非常的痛苦了,为了解决这个问题在SpringBoot里面就提供了一个所谓的热加载的机制,只要你的程序发生了变更,那么就会自动的进行SpringBoot容器的重新启动,而后加载新的配置。

1、【microboot项目】如果要想解决这种自动加载的问题,需要在项目之中引入一个""依赖库

2、【IDEA工具】如果你现在使用的是Eclipse(STS工具),只需要引入以上的依赖就可以实现自动的加载了,但是如果是在IDEA工具里面,则还需要进行一些配置:【File】【Settings】

3、【IDEA工具】仅仅配置以上的选项还不能够支持自动的部署处理,如果要想实现部署的自动配置,那么还需要在IDEA工具里面进行一些配置的注册,按下一个组合键:" CTRL + SHIFT + ALT + / "



4、【[IDEA工具】当所有的配置都已经完成之后,就需要重新启动IDEA 工具才可以实现自动的热部署

在每次代码修改并且保存之后都会自动的重新启动SpringBoot容器,实际上这个时候的启动并不是整个容器的重新启动,而是内部的部分程序类的启动。

实际上所谓的热部署本质上是将整个的类加载器进行了拆分,在没有引入“devtools”工具的时候,所有的系统类和用户的程序类都使用同一个类加载器进行加载,但是当引入了“devtools”工具的时候,系统类有系统类的加载器,而程序类有程序类的加载器,此时实际上就是程序类的加载器进行重新工作,重新启动,这样的启动要比整个项目的重新启动速度更快一些。

Gradle 简单使用相关推荐

  1. Gradle简单配置

    写在前面:一开始配置gradle的时候,最好不要把他maven仓库配置在一起,前段时间配置公司项目身心俱疲.大部分公司里面用gradle都是配置的自己的仓库地址,所以有的东西就不要和网上的配置保持一致 ...

  2. Gradle 10分钟上手指南

    java的源码构建工具,大致经历了 ant -> maven -> gradle 这个过程,每一次进步,都是在解决之前的工具所带来的问题,简单来说: 1. ant 功能虽然也很强大,但是过 ...

  3. [Gradle] 在 Eclipse 下利用 gradle 构建系统

    构建系统时候常常要用到 Ant, Maven 等工具,对于初学者来说,它们还是过于复杂,上手还是需要时间的.本文将向读者介绍一种全新的构建项目的方式 gradle,它简单.上手快,能大大节省项目的时间 ...

  4. 了解安卓,了解JDK、SDK、NDK,了解gradle

    Android是一个开源的,基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑. 安卓开发环境: 安卓开发所使用的语言是JAVA或Kotlin,底层操作使用C\C++ ...

  5. android cmake 打印_Android NDK 开发:CMake 使用

    1. 前言 当在做 Android NDK 开发时,如果不熟悉用 CMake 来构建,读不懂 CMakeLists.txt 的配置脚本,很容易就会踩坑,遇到编译失败,一个很小的配置问题都会浪费很多时间 ...

  6. gradle_Gradle

    gradle Gradle is a project build and automation tool for java based applications; something like ivy ...

  7. 分词,难在哪里?科普+解决方案!

    题图:by Lucas Davies 一.前言 分词,我想是大多数大前端开发人员,都不会接触到的一个概念.这个不影响我们了解它,毕竟我们要多方向发展.今天就来简单介绍一些分词,我尽量用简介的语言来描述 ...

  8. Android的多渠道打包

    前言 本篇包括以下内容: 多渠道打包概述 友盟的多渠道打包 美团的多渠道打包 360的多渠道打包 多渠道打包概述 什么是多渠道包 渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠 ...

  9. gRPC 学习笔记

    简介 更多内容参考:https://www.grpc.io/docs/guides/ gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计.目前提供 C.Java 和 G ...

最新文章

  1. iOS自定义控件:简易下拉控件
  2. linux下的X server:linux图形界面原理
  3. [html] 如何使用H5唤起原生地图APP(百度、高德、腾讯地图等)
  4. php 生成验证码干扰元素,PHP生成指定位数验证码与可控干扰元素第二篇
  5. bootstrap-daterangepicker插件运用
  6. ElasticSearch和solr的对比
  7. android 华为手机灭屏搜索不到蓝牙_华为Mate 30更新EMUI10.1.0.132版本,新增10项实用功能...
  8. Php 取出session中的值,获取php值
  9. windows下mysql5.6安装
  10. Java hook qpi_Java中内部类对象的创建以及hook机制
  11. mtk6595能否运行linux,“被妖魔化”的联发科MTK6595到底如何?
  12. 推荐一款免费的SSH+sftp工具
  13. winform安装包签名
  14. 数学建模之matlab软件学习04——专题四MATLAB绘图
  15. 2021-01-07
  16. D触发器、D上升沿触发器、T触发器
  17. war3鸿蒙大陆攻略,【魔兽rpg地图失落大陆攻略汇总】
  18. ps去水印教程_Ps去水印教程:简单三步教新手学习去狮子图像上的水印,多余的文...
  19. 【前端学习-16】【day06】WebAPI编程/动画函数封装/回调函数/轮播图/自动播放/节流阀/返回顶部/筋斗云/触屏事件/触屏事件对象/
  20. postgres 删除 shema

热门文章

  1. ios 顶部tab滑动实现_iOS开发之多表视图滑动切换示例(仿头条客户端)
  2. python文本替换 数据库_在Python中使用ASCII文件中的注释查找/替换子...
  3. wordList01
  4. Jira更换mysql数据库_JIRA6.0更换数据库到MYSQL
  5. HDU 6061 RXD and functions(NTT)
  6. CodeForces - 336A Vasily the Bear and Triangle
  7. hdu 1576 A/B
  8. P5662-纪念品【dp】
  9. P2467-[SDOI2010]地精部落【dp】
  10. nssl1258-naive的瓶子【贪心】