一、gradle安装及配置

1、下载及安装
gradle官网下载对应gradle安装包。首页点击“Install Gradle”,对应页面的“Installing manually”下点击download,选择对应版本下载即可。有Binary-only和Complete两种。Complete是带了文档的。然后解压到任意目录即可
在这里插入图片描述
2、环境变量配置。
与java环境变量配置类似:
1、配置GRADLE_HOME。
2、添加到path中:%GRADLE_HOME%\bin。
3、cmd中输入gradle -v 校验。
需要先安装好java环境。

二、gradle简介

1、Groovy简介

gradle是基于groovy的,其 build 脚本使用 groovy dsl 编写。Groovy是用于Java虚拟机的一种敏捷的动态语言,是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用于编写脚本。与Java的区别:
(1)兼容java语法
(2)分号非必输
(3)类、方法、默认public
(4)编译器给属性自动添加getter/setter方法
(5)属性可以用点获得
(6)最后一个表达式的值会作为返回值,可以不用写return
(7)==等同于equals(),所以即使有对象为空,也不会有空指针异常
groovy的几个高效特性(以下代码可以在IntelliJ IDEA的groovy console中运行):
(1)高效的类型定义

def version=1 //这里version就是int类型,类似JavaScript里的var

(2)assert断言语句可以在任何地方执行。
(3)括号是可选的

println(version)  
println version    //这两种写法效果是相同的

(4)字符串

def s1='groovy'    //普通字符串
def s2="gradle version is ${version}"   //可以加参数的字符串
def s3='''my name
is groovy'''    //可以换行

println s1
println s2
println s3

(5)集合

//List
def buildTools=['ant','maven']
buildTools <<'gradle'
println buildTools.getClass()==ArrayList
println buildTools.size()==3

//map
def buildYears=['ant':2000,'maven':2004]
buildYears.gradle=2009
println buildYears.ant
println buildYears.gradle
println buildYears.getClass()   //输出位:class java.util.LinkedHashMap

(6)闭包

//闭包相当于一个代码块,可以被赋值给一个变量,也可以作为参数传递给方法
//c1,c2分别为带参数的闭包和不带参数的闭包
def c1 ={
    v1 ->
        println v1
}
def c2={
    println 'groovy'
}
//methon1和methon2的参数为闭包,Closure需要引用groovy自带的类,不要引用java的类
def methon1(Closure closure){
    closure('gradle')
}
def methon2(Closure closure){
    closure()
}

methon1(c1)
methon2(c2)

2、gradle构建基础

Projects 和 tasks
projects 和 tasks是 Gradle 中最重要的两个概念。

任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。
每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。
到目前为止,可以发现我们可以在一个 project 中定义一些简单任务,后续章节将会阐述多项目构建和多项目多任务的内容。
在这里插入图片描述
简单的gradle项目解析
使用eclipse或者IDEA创建gradle项目后,会自动创建build.gradle和settings.gradle两个脚本文件。
目录结构和maven类似:
在这里插入图片描述
gradle 任务窗口:
在这里插入图片描述
build.gradle脚本解析:

group 'org.springframework'  //项目组名
version '1.0-SNOPSHOT'    //版本号

apply plugin: "java"   //引用java插件  新版本可能是这种写法 plugins { id 'java'}
apply plugin: "war"   //用来打war包
sourceCompatibility=1.8    //java版本

//仓库管理
repositories{
      mavenCentral()
}

//依赖管理
dependencies{
       testCompile group: 'junit', name: 'junit', version: '4.12'
}

自定义任务
我们可以在build.gradle中自定义我们自己的任务,可以在gradle视图的tasks下的others下看到我们自己的任务。

//创建项目资源路径
//闭包
def createDir = {
    path ->
        File dir = new File(path)
        if(!dir.exists()){
            dir.mkdirs();
        }
}

task makeJavaDir(){
    def paths=['src/main/java','src/main/resources','src/test/java','src/test/resources']
    //任务的动作,doFirst任务开始时执行,doLast任务结尾执行。<<操作符时doLast的简写形式。
    //一个动作可以多次调用
    doFirst {
        paths.forEach(createDir)
    }
}

task makeWebDir(){
    //dependsOn是task的方法,表示此任务依赖其他的任务,此任务执行前,依赖的任务需要先执行
    dependsOn 'makeJavaDir'
    def paths=['src/main/webapp']
    doLast {
        paths.forEach(createDir)
    }
}

依赖管理

//仓库管理
repositories{
      google()   //谷歌仓库
      mavenLocal() //本地的maven仓库
      mavenCentral() //maven的中央仓库
      jcenter()    //Goovy Grape内的默认仓库
      maven{   //maven私服
           url  ''
      }
}
示例:
repositories {
    mavenLocal()
    maven { url "http://maven.aliyun.com/nexus/content/groups/public/"}
    mavenCentral()
    jcenter()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
    maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' } 
}

//依赖管理 testCompile表示再测试代码编译阶段依赖这个包
//可以去maven的中央仓库去找我们需要的jar包 https://mvnrepository.com/repos/central
//每个包都会有会有gradle对应的依赖写法,复制到我们项目中即可
dependencies{
       testCompile group: 'junit', name: 'junit', version: '4.12'
}

在这里插入图片描述
解决冲突
gradle会自动帮我们解决jar包的版本冲突,默认使用最高的那个版本,我们也可以手动解决冲突。

//修改默认解决策略来查看Gradle之间哪些包出现版本冲突
configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
         force 'org.slf4j:slf4j-api:1.7.24'
    }
}

//方法一 排除冲突的依赖包
dependencies {

    compile('org.hibernate:hibernate-core:3.6.3.Final') {
                exclude group:"org.slf4j",module:"slf4j-api"  //排除了hibernate堆slf4j的依赖
    }
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}

//方法二 强制指定版本
configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
         force 'org.slf4j:slf4j-api:1.7.24' //强制指定了版本
    }
}

多项目构建
上文我们说过gradle项目包含build.gradle和settings.gradle两个脚本文件,上面介绍了build.gradle,现在介绍一下settings.gradle。settings.gradle是多项目构建下管理项目和子项目的
settings.gradle

rootProject.name = 'groovy'  //根模块名
include 'groovyweb'   //子模块

在进行多项目构建的时候,我们需要在根项目下的build.gradle配置所以项目相同的配置,在子项目的build.gradle下配置子项目的个性化需求。示例:假设有根项目、java模块子项目、web模块子项目,web模块子项目需要引用java模块子项目。则,根项目的配置:

//所有项目的配置
allprojects {
    apply plugin :'java'
    sourceCompatibility = 1.8
}
//子项目的配置
subprojects {
    repositories {
        mavenCentral()
    }
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
        compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
    }
}

web模块子项目配置:

apply plugin :'war'
dependencies {
       compile project(':javaproject')
}

至于group和version 我们可以创建一个名为gradle.properties的文件,然后配置。

group ='com.dmf.gradle'
version ='1.0-SNAPSHOT'

gradle测试
项目布局
在这里插入图片描述
build\reports\tests目录下就是网页版的测试结果。
测试配置(引入测试框架,编写测试代码):

dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }

gradle在build时就会发现测试类。编译并且执行。
在这里插入图片描述

发布
在公司里,我们需要把项目发布到私服上,供其他同事下载或使用时,就需要使用发布功能了

//引入插件
apply plugin: 'maven-publish'

publishing {
    publications {
        myPublish(MavenPublication){
            from components.java
        }
    }
    repositories{
        maven{
            name ''
            url ''
        }
    }
}

gradle参考资料
1、https://www.w3cschool.cn/gradle/
2、https://www.jianshu.com/p/001abe1d8e95

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐