gradle基础

原创 2017年06月20日 01:28:02

安装

1、确保已经安装jdk,用java -version判断一下
2、从Gradle官网下载并进行解压
- 配置环境变量,GRADLE_HOME
- 添加到path,%GRADLE_HOME%\bin;
- 验证是否安装成功,gradle -v
官网下载Binary-only和Complete (with docs and sources)都可以。

gradle工程目录结构

与maven的工程目录结构一样
这里写图片描述

构建脚本概要

Gradle构建中的两个基本概念是项目(project)和任务(task),每个构建至少包含一个项目,项目中包含一个或多个任务。在多项目构建中,一个项目可以依赖于其他项目;类似的,任务可以形成一个依赖关系图来确保它们的执行顺序。
这里写图片描述
project1依赖于project2,project1中taskA依赖于taskB和taskC,所以taskB和taskC执行完后才执行taskA。

项目(project)

一个项目代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle实例化一个org.gradle.api.Project类,并且能够通过project变量使其隐式可用

三个重要的属性–group、name、version– 对应maven中的坐标(groupId、artifactId、version),注(build.gradle中有group和version,而name在settings.gradle中)
重要的方法–apply、dependencies、repositories、task
属性的其他配置方式:ext、gradle.properties

任务

任务对应org.gradle.api.Task。主要包括任务动作和任务依赖。任务动作定义了一个最小的工作单元。可以定义依赖于其他任务、动作序列和执行条件。

重要方法
- dependsOn –任务依赖
- doFirst、doLast – task也是一个动作列表,doFirst在任务动作列表之前添加一个动作、doLast在任务动作列表之后添加一个动作。一个任务里可以执行多次doFirst和doLast
一般使用插件(jar或war等等)提供的任务,如果满足不了需求可以自定一任务。

自定义一个task生成工程目录

//创建java工程代码目录
def createDir = {
    path ->
        File dir = new File(path);
        if(!dir.exists()){
            dir.mkdirs();
        }
}

//声明一个task
task makeJavaDir(){
    def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources',];
    doFirst{
        paths.forEach(createDir);
    }
}

然后点击gradle中的刷新,就会在other中出现定义的任务
这里写图片描述
点击可以生成jar包,我们可以运行有main方法的jar包,例

java -classpath build/libs/tododemo-1.0-SNAPSHOT.jar com.kedou.gradle.tododemo.App

再编写一个任务依赖,这里创建一个web工程的目录

task makeWebDir(){
    dependsOn 'makeJavaDir'
    def paths = ['src/main/webapp','src/test/webapp'];
    doLast {
        paths.forEach(createDir);
    }
}

doFirst和doLast是生命周期执行阶段的执行代码,上例中其他就是配置阶段的代码

gradle 任务与插件

Android知识要点整理(21)—-Gradle 之创建任务和插件

构建生命周期

Gradle生命周期

依赖管理

常用仓库 mavenLocal/mavenCentral/jcenter,还有自定义maven仓库(也就是maven私服)。

依赖阶段配置

  • compile、runtime –源代码
  • testCompile、testRuntime – 测试代码
    这里写图片描述
    runtime依赖于compile,所以compile依赖的东西runtime也会依赖
    testCompile依赖与compile,所以compile依赖的东西testCompile也会依赖。

解决版本冲突

  • 查看依赖报告
  • 排除传递性依赖
  • 强制一个版本
  • gradle默认解决策略,自动帮我们依赖最高版本的jar包

修改默认解决策略,从而发现版本冲突

//修改默认解决策略,使其当有依赖冲突构建失败
configurations.all {
    resolutionStrategy{
        failOnVersionConflict()
    }
}

加上如上配置,执行build,结果:

Error:A conflict was found between the following modules:
 - org.slf4j:slf4j-api:1.6.1
 - org.slf4j:slf4j-api:1.7.22
 - org.slf4j:slf4j-api:1.5.8

去掉上面的依赖冲突构建失败配置,点击task的help中的dependencies查看依赖树
这里写图片描述

点击后结果如下:

compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- org.hibernate:hibernate-core:3.6.3.Final
|    +--- antlr:antlr:2.7.6
|    +--- commons-collections:commons-collections:3.1
|    +--- dom4j:dom4j:1.6.1
|    +--- org.hibernate:hibernate-commons-annotations:3.2.0.Final
|    |    \--- org.slf4j:slf4j-api:1.5.8 -> 1.7.22
|    +--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.0.Final
|    +--- javax.transaction:jta:1.1
|    \--- org.slf4j:slf4j-api:1.6.1 -> 1.7.22
\--- ch.qos.logback:logback-classic:1.2.1
     +--- ch.qos.logback:logback-core:1.2.1
     \--- org.slf4j:slf4j-api:1.7.22

而使用默认策略的结果就是使用最新的
这里写图片描述

排除传递性依赖

样例:

compile ("org.springframework.boot:spring-boot-starter-aop:${springBootVersion}") {
  exclude group: 'org.slf4j', module: 'slf4j-api'
  exclude group: 'ch.qos.logback', module: 'logback-classic'
}

参考解决Gradle传递性依赖冲突

强制指定一个版本

//修改默认解决策略,使其当有依赖冲突构建失败
configurations.all {
    resolutionStrategy{
        failOnVersionConflict()
        force 'org.slf4j:slf4j-api:1.7.22'
    }
}

ext与gradle.properties的使用

关于Gradle配置的小结

全局配置

根(root)下的build.gradle中共同的东西配置在allprojects和subprojects中

gradle测试

这里写图片描述
常用的是这样被发现,其他测试框架则按照提供的文档来

发布

使用Gradle发布项目到JCenter仓库

源码

学习源码

Gradle构建脚本基础

Gradle构建脚本,内部是基于 Groovy 的 DSL(领域特点语言),而Maven是基于XML的,Groovy相比XML更加简洁、灵活和强大。 Groovy 因为给 Java 开发人员提供了最大...
  • zxc123e
  • zxc123e
  • 2017-06-01 13:54:47
  • 348

gradle学习笔记(二) Groovy基础

前言 在 gradle学习笔记(一) 中说到 gradle学习基础: Groovy 和 DSL。所有这篇笔记就学习Groovy。先介绍groovy,然后开始学习步骤(当然主要学gradle用得到的...
  • u014099894
  • u014099894
  • 2016-04-11 00:12:26
  • 1142

Gradle for Android 使用之旅之gradle的基础

理解Android .gradle,学会使用它。
  • consumer11
  • consumer11
  • 2016-09-26 17:36:11
  • 782

Gradle基础--认识Gradle

有人用android studio开发android项目,发现经常接触到Gradle,但是对它又不会有很大的关注,而当你的Gradle报错,或者从github,csdn上下载开源项目的时候,一旦出现g...
  • zhanggang740
  • zhanggang740
  • 2015-11-18 15:25:04
  • 12805

gradle使用基础

说明介绍gradle使用基础,gradle基础脚本结构和常规使用方法,以及一个简单的gradle示例.主要是为了简单的介绍gradle使用。gradle环境配置gradle可以通过两种方式运行grad...
  • chf1142152101
  • chf1142152101
  • 2017-07-03 15:26:17
  • 590

Gradle 快速入门

正如标题所写的那样,本文都是我的一些经验之谈,旨在让读者能够以最快的速度上手Gradle,少走弯路。...
  • hjpdyxhjd
  • hjpdyxhjd
  • 2015-12-20 16:39:20
  • 1852

gradle用户手册

  • 2015年06月02日 12:54
  • 2.25MB
  • 下载

Android Studio安装使用系列教程.doc

  • 2017年12月27日 09:46
  • 5.97MB
  • 下载

Gradle构建之Groovy语言基础

Gradle的构建脚本是采用Groovy语言编写的。Groovy是Java平台上设计的一种强大的、可选类型和动态的语言。Groovy可以无缝地集成任何Java程序,并立即让你的应用程序拥有强大的特性,...
  • u012317510
  • u012317510
  • 2017-08-26 15:58:01
  • 978

Android Studio--Gradle脚本初识

其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧...
  • hanhailong726188
  • hanhailong726188
  • 2015-04-29 19:44:09
  • 1739
收藏助手
不良信息举报
您举报文章:gradle基础
举报原因:
原因补充:

(最多只允许输入30个字)