Gradle 简单使用

文章目录

    • 创建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”工具的时候,系统类有系统类的加载器,而程序类有程序类的加载器,此时实际上就是程序类的加载器进行重新工作,重新启动,这样的启动要比整个项目的重新启动速度更快一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将HBuilder中的项目Push至Gitee中!

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。昨天,给大家介绍了下HBuilder中怎么从gitee中拉取项目至本地,需要的小伙伴们可以点击链接查看:如何从Gitee中拉取项目到HBuilder中?今天&…

PLEASE小组KTV点歌系统简要说明

PLEASE小组KTV项目指导老师:穆老师 班主任:佟老师小组成员:组长:徐祥 副组长:孟祥帅组员:董经纬 组员:孙晓文 周航 组员:徐龙一 张远远制作周期:2021年6月25日…

C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 没啥好说的.开干吧. 今天的学习内容? 今天的内容比较简单. 就几个弹出框和内置的消息通讯中心. 如图: 正文 1.xamarin中的弹出窗 xamarin帮我们把各个系统的弹出窗做了2个统一的类. 1.…

Java Agent的隔离实现以及卸载时一些坑

转载自 Java Agent的隔离实现以及卸载时一些坑 在《一文带你了解Java Agent》中,让大家了解了Java Agent的来龙去脉,当通过attach方式去动态加载一个Java Agent时,Agent中的类会被加载到业务的虚拟机中,在使用完Agent的之后&am…

KTV阶段项目告一段落,让我们张开双臂迎接新阶段吧!!

经过两周的周期,KTV项目终于告一段落,今天进行了项目答辩,大家表现的都很棒哦,以下是对KTV项目的一个简要总结。各位老师,各位4班的同学们,以及各位其他班的同学,大家下午好,首先需要…

Orleans稍微复杂的例子—互动

我费力费心的翻译过官方的教程,但是本人英语词汇量不高,可是架不住电子词典啊…只要肯花时间,我这些内容谁都可以做出来.所以这个事例告诉我们一个道理,那就是码农有三好,钱多话少死得早.我也许只有后两好. 当初阿尔法狗在围棋上战胜人类的时候,人工智能一时大热,不管老小,都大…

(链表 栈 队列 递归)

文章目录链表反转链表删除点链表中给定值的结点栈和队列双向链表实现栈和队列数组实现队列获取栈的最小值用两个栈实现一个队列用两个队列实现一个栈递归链表 反转链表 (反转单链表 反转双向链表) public class Code01_ReverseList {public static cl…

一文带你了解Java Agent

转载自 一文带你了解Java Agent Java Agent这个技术,对于大多数同学来说都比较陌生,像个黑盒子。但是多多少少又接触过,实际上,我们平时用的很多工具,都是基于Java Agent实现的,例如常见的热部署JRebel&am…

P3834-【模板】可持久化线段树 1(主席树)

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP3834 题意 给定一个长度为n的序列,有m个询问,求一个区间内的第k小的树。 解题思路 我们先思考用线段树快速询问第k小的树 我们可以用权值线段树来处理第k小的树&…

点滴小组KTV点歌系统简介

‍‍20级青鸟四班 点滴小组指导老师:穆老师 班主任:佟老师小组成员:组长:路鑫 副组长:戴洁 王硕组员:马蓥芳 组员:徐圣乾组员:徐圣坤 组员:赵昌杰制作周期:…

迁移.net framework 工程到.net core

在迁移.net core的过程中,第一步就是要把.net framework 工程的目标框架改为.net core2.0,但是官网却没有提供转换工具,需要我们自己动手完成了。.net framework 工程迁移为.net core工程大体上有两种方案: 1.创建一个.net core的…

(归并排序 快排 堆)

文章目录归并排序递归方法实现非递归方法实现求数组的小和求数组的降序对个数快排荷兰国旗问题(Partition过程)快排1.0快排2.0快排3.0堆大根堆堆排序使用堆排序归并排序 递归方法实现 public class Code01_MergeSort {// 递归方法实现public static vo…

亦云小组KTV点歌系统简介

20级青鸟四班 亦云小组指导老师:穆老师 班主任:佟老师小组成员:组长:靳天宇组员:王晓丹 谢佳泽 王睿志 蒲璐颖 张铨政目录:1.首页 2.项目前台 3..项目后台总结:本次KTV项目总结。总体来说&…

学习手记(2018/7/14~2018/7/18)——快乐纪中

2018/7/14:普通的纪中一天 儿子兄弟表示法 将一颗多叉树转换为二叉树的方法,左子节点连原树的第一个儿子,右子节点连原树的右边的兄弟 适用范围:树形dp 数位dp常见方法 状态压缩 分类讨论记忆法(记忆化搜索&#x…

Entity Framework Core 2.0 特性介绍和使用指南

前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本,可以用三个词来概况EF Core的特点:轻量级、可扩展、跨平…

图解elasticsearch原理转载自

转载自 图解elasticsearch原理 版本 elasticsearch版本: elasticsearch-2.x 内容 图解ElasticSearch 云上的集群 集群里的盒子 云里面的每个白色正方形的盒子代表一个节点——Node。 节点之间 在一个或者多个节点直接,多个绿色小方块组合在一起形成一个Elas…

零云九歌小组KTV点歌系统简介

指导老师:穆老师 班主任:佟老师小组成员:组长:张炜林 副组长:李钰组员:郑宪佳 宋翔 李兆勋 杜庆霖零云九歌目录:1.首页 2.项目前台 3..项目后台总结:本次KTV项目总结。总体来说&am…

Orleans简单配置

话说曾几何时,我第一次看到xml文件,心中闪过一念想:"这<>是什么鬼?"…用ini或者json多简单易懂,现在发觉作为配置文件,json有赶超xml的趋势.不过xml用多了,也觉得顺眼多了.不觉得<>难看了,反而它能折叠让我觉得组织起来也更方便了.这说明一个道理:不是你…

say小组KTV点歌系统简介

指导老师&#xff1a;穆老师 班主任&#xff1a;佟老师小组成员&#xff1a;组长&#xff1a;焦文宇 组员&#xff1a;窦倩 王晓凤 巩固 石虹蔓 田锋目录&#xff1a;1.首页 2.项目前台 3..项目后台总结&#xff1a;从5月25号开始的到6月10号结束&#xff0c;这期间我们遇…

Java虚拟机必学之四大知识要点,附学习资料

转载自 Java虚拟机必学之四大知识要点&#xff0c;附学习资料 作为一位 Java 程序员&#xff0c;在尽情享受 Java 虚拟机带来好处的同时&#xff0c;我们还应该去了解和思考“这些技术特性是如何实现的”&#xff0c;去了解最底层的原理。只有熟悉 JVM&#xff0c;你才能在遇…