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配置文件基础

Android Studio构建系统基础 每一个Module都需要有一个gradle配置文件,语法都是一样,唯一不同的是开头声明的是apply plugin。注意区分不同位置的build.gradl...
  • tpnndhqc
  • tpnndhqc
  • 2016年04月17日 12:19
  • 592

Gradle系列之Gradle基础

Gradle系列之Groovy基础 Gradle系列之Gradle基础 Gradle系列之自定义插件 gradle的工作流程 gradle工作流程分为三步 Initialization :...
  • u010014658
  • u010014658
  • 2018年01月08日 01:55
  • 42

Gradle——构建脚本基础

1、项目(project)和任务(task)Gradle中的任何事都基于两个基本概念:项目(project)和任务(task)每一个构建(build)都是由一个或多个项目组成的。一个项目代表什么取决于...
  • u012325167
  • u012325167
  • 2015年10月19日 20:08
  • 303

Gradle脚本基础全攻略

【工匠若水 http://blog.csdn.net/yanbober 转载请注明出处。点我开始Android技术交流】 1 背景 在开始Gradle之前请务必保证自己已经初步了解了Gro...
  • IT_ORACLE
  • IT_ORACLE
  • 2016年10月21日 17:14
  • 378

Gradle脚本基础

Gradle中所有的东西都是基于两个概念:tasks和projects,每一个Gradle构建都是有一个或多个projects组成的。project的概念比较广泛,具体看你在Gradle中是怎么定义的...
  • fanfanxiaozu
  • fanfanxiaozu
  • 2015年03月04日 20:05
  • 437

Gradle脚本基础全攻略

http://blog.csdn.net/yanbober/article/details/49314255#t15 目录(?)[-] 背景Gradle DSL基础 2-1 构建脚本Buil...
  • baidu_26352053
  • baidu_26352053
  • 2017年05月19日 17:49
  • 334

Gradle语法基础解析

转载自https://github.com/D-clock/Doc/blob/master/Gradle/2_Gradle%E8%AF%AD%E6%B3%95%E5%9F%BA%E7%A1%80%E8...
  • CTO_1649900265
  • CTO_1649900265
  • 2017年03月17日 10:15
  • 131

什么是Gradle?

什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。安装...
  • qibanxuehua
  • qibanxuehua
  • 2016年05月14日 22:47
  • 1139

灵活强大的构建系统Gradle

前言 构建,软件生命周期中重要的一环,在现代软件开发过程中,起着越来越重要的作用。过去在Java或类Java的世界里,Ant、Maven再熟悉不过了,Maven凭借其强大的依赖配置战胜Ant,基...
  • xu_song
  • xu_song
  • 2016年06月03日 13:51
  • 819

Gradle基础学习

参考一 参考二 **一:Gradle概念:**Gradle是一种依赖管理工具,基于Groovy语言,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。...
  • shuixingge1992
  • shuixingge1992
  • 2016年09月24日 22:28
  • 129
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:gradle基础
举报原因:
原因补充:

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