75Gradle学习笔记

               Gradle学习笔记

1 Gradle简介

Gradle是源于Apache Ant和Apache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置面向Java应用为主。当前其支持的语言暂时有Java、Groovy、Kotlin和Scala。

Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。

有人说Gradle使用groovy语言编写,简单,明了没像maven使用xml臃肿,

其实我倒不觉得,我觉得maven挺好的,管理jar依赖和项目生命周期挺方便的,

我使用Gradle只是因为公司用,不然我估计不会学习Gradle。

下面是Gradle的优点,自己斟酌吧。

  1. 按约定声明构建和建设;
  2. 强大的支持多工程的构建;
  3. 强大的依赖管理(基于Apache Ivy),提供最大的便利去构建工程;
  4. 全力支持已有的 Maven 或者Ivy仓库基础建设;
  5. 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下;
  6. 基于groovy脚本构建,其build脚本使用groovy语言编写;
  7. 具有广泛的领域模型支持构建;
  8. 深度 API;
  9. 易迁移;
  10. 自由和开放源码,Gradle是一个开源项目,基于 ASL 许可。

Java作为世界级主流编程语言。

​ 2000年 Ant
​ 2004年 Maven
​ 2012年 Gradle

maven: 管理jar包+项目打包
坐标是根据xml配置的
Gradle不使用xml来配置,groovy语言,更有优势?

本课程主要分以下几个步骤来讲解Gradle工具的使用:

​ 1.Gradle安装配置(windows版)
​ 2.Gradle和Idea集成
​ 3.groovy语言简单介绍
​ 4.Gradle仓库的配置
​ 5.Gradle入门案例
​ 6.Gradle创建Java web工程并在tomcat下运行
​ 7.Gradle构建多模块项目

编译web工程:
apply plugin:‘war’

2 Gradle环境搭建

2.1 下载

官方网站:https://services.gradle.org/distributions/

提供了两种下载方式,Binary-only是只下载二进制源码,Complete, with docs and sources是下载源码和文档。

如果有阅读文档的需求可以下载第二个,没有需要的下载Binary-only即可。

image-20211222162034092

选择gradle-7.0.2-bin版本,下载到本地:

image-20211222162242916

2.2 安装

解压下载的gradle-7.0.2-bin.zip到本地即可

image-20211222162400310

2.3 配置

2.3.1 新建变量GRADLE_HOME

变量名:GRADLE_HOME

变量值:D:\01program_soft\01install_before\gradle\gradle-7.0.2

image-20211222162608867

2.3.2 新建变量GRADLE_USER_HOME

变量名:GRADLE_USER_HOME

变量值:D:\01program_soft\01install_before\maven\localRepository

image-20211222162704732

2.3.3 添加变量到path

变量名:Path

变量值:%GRADLE_HOME%\bin;

image-20211222162753336

2.3.4 修改配置

在Gradle安装目录下的 init.d 文件夹下,新建一个 init.gradle 文件( 这个init.gradle就相当于maven中的settings.xml),

填写以下配置:

allprojects {
    repositories {
        maven { url 'file://E:\software\maven_repository'}
        mavenLocal()
        maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
        maven { name "Bstek" ; url "http://nexus.bsdn.org/content/groups/public/" }
        mavenCentral()
    }

    buildscript { 
        repositories { 
            maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
            maven { name "Bstek" ; url 'http://nexus.bsdn.org/content/groups/public/' }
            maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
        }
    }
}

#repositories中写的是获取 jar 包的顺序。
	#先是本地的 Maven 仓库路径;
	#接着的 mavenLocal() 是获取 Maven 本地仓库的路径,应该是和第一条一样,但是不冲突;
	#第三条和第四条是从国内和国外的网络上仓库获取;
	#最后的 mavenCentral() 是从Apache提供的中央仓库获取 jar 包。

2.3.5 验证安装是否成功

Dos命令行输入:gradle

image-20211222163007187

出现上面截图,说明Gradle配置正确。

2.3.5 Gradle配置本地仓库

gradle的默认仓库路径为用户目录下的.gradle目录,gradle并没有像maven那样提供配置文件,

若要修改默认仓库路径,我们可以设置环境变量GRADLE_USER_HOME,

windows下同理。我把仓库设置在gradle目录下
Linux:

export GRADLE_HOME=/usr/local/gradle
export PATH=$GRADLE_HOME/bin:$PATH
export GRADLE_USER_HOME=$GRADLE_HOME/.gradle

Windows:

GRADLE_USER_HOME=c:/gradle/.gradle

在环境变量中添加名为 “GRADLE_USER_HOME”,值为 “本地maven仓库位置” 的环境变量即可

以后gradle就会从指定的本地仓库进行库的下载和读取

不会再去用户目录下(user_home/.gradle/cache)进行库的下载和读取

可能有很多人在纠结这个 Gradle 能不能像 maven 一样手动修改本地仓库,答案当然是肯定的,而且很简单,只需要在环境变量里面做个配置即可如下图:

img

即添加一个名称为 GRADLE_USER_HOME ,值是你想放gradle本地仓库的地方即可。

环境变量配置 GRADLE_USER_HOME 后,IDEA会自动识别本地仓库:

image-20211223105339325

2.3.6 Gradle配置远程仓库

一般Gradle、maven从中央仓库mavenCentral() http://repo1.maven.org/maven2/下载依赖包,

但是在国内下载速度巨慢,我们只能使用国内的镜像。
所以每个Gradle构建的项目中,我们可以在build.gradle做如下配置

repositories {
    maven {
        url 'http://maven.aliyun.com/nexus/content/groups/public/'
    }
    mavenCentral()
}

每个项目都如此配置难免麻烦些,我们可以配置一个全局配置文件。

在 C:Users 用户名.gradle 的目录下创建文件 init.gradle 并添加下面代码,使用阿里云的仓库地址。

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                    remove repo
                }
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

gradle 配置指南

在 build.gradle 文件中加入以下代码:

allprojects {
  repositories {
    maven {
      url 'https://maven.aliyun.com/repository/public/'
    }
    mavenLocal()
    mavenCentral()
  }
}

如果想使用其它代理仓,以使用spring仓为例,代码如下:

allProjects {
  repositories {
    maven {
      url 'https://maven.aliyun.com/repository/public/'
    }
    maven {
      url 'https://maven.aliyun.com/repository/spring/'
    }
    mavenLocal()
    mavenCentral()
  }
}

加入你要引用的文件信息:

dependencies {
  compile '[GROUP_ID]:[ARTIFACT_ID]:[VERSION]'
}

2.3.7 IDEA中配置Gradle

在IDEA的Setting里打开"Build, Execution, Deployment"-“Build Tools”-“Gradle”。

勾选 Use local Gradle distribution,在 Gradle home 中选择安装的Gradle的路径。

​ 如果在变量和配置文件中设置了Gradle的仓库路径,在 Service directory path 中就会自动填写地址,

​ 如果想改的话可以手动修改。

image-20211222163742659

新版界面:

image-20211222163829000

2.4 Gradle新建Java工程

1.File–>New–>Project

image-20211223133212218

2.在接下来的界面中选择"Gradle",JDK选1.8,勾选“Java”,点击“Next”

image-20211223133315338

3.在接下来的界面中输入工程名称,工程存放目录,pom文件坐标三要素,点击“Finish”

image-20211223133824554

4.构建的Gradle Java工程目录,如下:

image-20211223134736185

  • .gradle,gradle的相关支持文件,不用管
  • .idea,IntelliJ IDEA的相关文件,不用管
  • build,构建生成物,存放项目构建中生成的class和jar包
  • gradle,一个gradle的包装程序,貌似直接用gradle不太好,得再包一层,这个其实我们也不用管
  • src,我们写代码的地方,不用说了吧
  • build.gradle,gradle的构建配置,这是我们要关心的,相当于Maven的pom.xml
  • GradleLearn.iml,IntelliJ IDEA的项目文件
  • gradlew,一段gradle wrapper的运行脚本
  • gradlew.bat,一段gradle wrapper的运行脚本,For Windows

5.build.gradle文件中加入springframework依赖更新后,截图如下:

image-20211223135532385

6.用gradle将工程打成jar包

image-20211223140721087

build日志如下:

14:04:46: Executing task 'build'...
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :jar
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date
14:04:46: Task execution finished 'build'.

2.5 Gradle新建Web工程

1.File–>New–>Project

image-20211223133212218

2.在接下来的界面中选择"Gradle",JDK选1.8,勾选“Web”,点击“Next”

image-20211223141222764

3.在接下来的界面中输入工程名称,工程存放目录,pom文件坐标三要素,点击“Finish”

image-20211223141339132

4.构建的Gradle Java工程目录,如下:

image-20211223141700413

5.build.gradle文件中加入springframework依赖更新后,截图如下:

image-20211223141916999

6.用gradle将工程打成war包

image-20211223142101637

build日志如下:

14:19:52: Executing task 'build'...
> Task :compileJava NO-SOURCE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :war
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
14:19:53: Task execution finished 'build'.

3 groovy基本语法

3.1 输出语句

println("hello groovy");
println("hello groovy")
println "hello groovy"

3.2 定义变量

int string double

总结:groovy语言中都是对象,没有基本类型概念

int a =23
println a

def b=23
println b;

3.3 定义方法

def play(def str){
	println(str+"===hello maven")
}
play("groovy")

3.4 定义分支语句

定义分支语句if…else…

def plays(def b){
    if(b){
        println("hello world")
    }else{
        println("hello groovy")
    }
}
plays(true)

3.5 定义list和map集合及遍历

def list =["xiaohei","xiaochen","xiaosan"]
//根据下标获取集合中的元素
println list[0]
//遍历集合
for(str in list){
    println str
}

//定义map集合
def map =["key1":"value1","key2":"value2","key3":"value3"]
//直接获取map集合中元素key
println map.get("key1")//遍历map集合
for(entry in map){
    println(entry.key+":"+entry.value);
}

3.6 groovy闭包

闭包就是groovy中一段代码块,主要是用来作为参数在方法之间传递使用
闭包一定有返回值,闭包没有return语言,返回null,反之,返回具体的值
没有return的闭包,没有太大的意义。

//定义闭包
def m ={
    println("hello world");
}
//定义一个带闭包参数的方法
def play3(Closure closure){
    closure(); //执行闭包中的内容
}
play3(m);

//定义带参数的闭包
def m2 = {
    v->println("参数为"+v)

}
def play4(Closure closure){
    closure("xiaohei");
}
play4(m2);

4 build.gradle配置详解

4.1 构建项目环境

plugins {
    id 'java'
}

apply plugin:‘java’ ----Java工程

apply plugin:‘war’ ----web工程

4.2 项目组名和版本号

//项目组名和版本号
group 'com.tangguanlin'
version '1.0-SNAPSHOT'

4.3 源码的编译版本

//源码的编译版本
sourceCompatibility = 1.8

4.4 指定maven仓库

​ 单个项目 指定maven仓库 build.gradle

//指定maven仓库 仓库管理
repositories {
    mavenLocal()   //先在本地仓库中找
    mavenCentral() //再到中央仓库中找
}

在这里插入图片描述

4.5 定义jar包坐标

Gradle工程所有的jar包的坐标都在dependencies属性内放置 jar包依赖
每一个jar包的坐标都有三个基本元素组成
group,name,version
testcompile表示该jar包在测试的时候起作用,该属性为jar包的作用域
我们在Gradle里面添加坐标的时候都要带上jar包的作用域
compile打包的时候,会被打包到jar中

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.springframework',name:'spring-context',version: '5.0.2.RELEASE'
}

4.6 依赖继承

父工程加上这个标签,所有的子工程都有这些依赖了,
公共的属性放父工程中、子工程只定义自己特定的标签

allprojects{
     
}

4.7 子模块引用别的模块的代码

​ service工程引入dao工程代码:

 dependencies{
	    compile project(":gradle_02_dao")
}

5 Gradle构建Java项目

5.1 项目截图

img

5.2 settings.gradle

settings.gradle

rootProject.name = 'gradle003'

5.3 build.gradle

build.gradle

//构建项目环境
plugins {
    id 'java'
}

//项目组名和版本号
group 'com.tangguanlin'
version '1.0-SNAPSHOT'

//源码的编译版本
sourceCompatibility = 1.8

//指定maven仓库 仓库管理
repositories {
    mavenLocal()  //先在本地仓库中找
    mavenCentral() //再到中央仓库中找
}

//Gradle工程所有的jar包的坐标都在dependencies属性内放置  jar包依赖
//每一个jar包的坐标都有三个基本元素组成
//group,name,version
//testcompile表示该jar包在测试的时候起作用,该属性为jar包的作用域
//我们在Gradle里面添加坐标的时候都要带上jar包的作用域
//compile打包的时候,会被打包到jar中
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.springframework',name:'spring-context',version: '5.0.2.RELEASE'
}

5.4 运行结果

image-20211222140708463

构建日志:

14:05:57: Executing task 'build'...

> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :jar
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date
14:05:57: Task execution finished 'build'.

6 Gradle构建Web项目

6.1 项目截图

img

6.2 setting.gradle

settings.gradle

rootProject.name = 'gradle004'

6.3 build.gradle

plugins {
    id 'java'
}

apply plugin:'war'

group 'com.tangguanlin'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenLocal();
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.mybatis', name: 'mybatis', version: '3.5.6'
    compile group: 'com.alibaba', name: 'fastjson', version: '1.2.75'
}

6.4 运行结果

image-20211222140220665

构建日志:

14:01:00: Executing task 'build'...

> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :war
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date
14:01:01: Task execution finished 'build'.

dencies {
testCompile group: ‘junit’, name: ‘junit’, version: ‘4.12’
compile group: ‘org.mybatis’, name: ‘mybatis’, version: ‘3.5.6’
compile group: ‘com.alibaba’, name: ‘fastjson’, version: ‘1.2.75’
}




## 6.4 运行结果

[外链图片转存中...(img-3MSCiaL2-1640245633249)]

构建日志:

```properties
14:01:00: Executing task 'build'...

> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :war
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date
14:01:01: Task execution finished 'build'.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值