学习 Gradle 的笔记

在学这个之前,我学了 Groovy ,虽然不是 Groovy 的大神,但基本的也都弄明白了

学 Gradle 之前,要理解几个关键:闭包,方法、参数调用的简写,Groovy 脚本的编写与调用等等一些概念要清楚

/**
 * 1、每个 gradle 文件都包含一个 Project 对象
 */

/**
 * 2、两个重要的基本概念:项目(project),任务(task)
 *    每个构建至少包含一个项目,一个项目包含一个或多个任务
 *    多项目构建中,可以相互依赖项目,任务也可以相互依赖
 */

/**
 *  3、项目:一个项目代表一个正在构建的组件(jar 包 ,war 包 等)
 *     当构建启动后,Gradle 会根据 build.gradle 文件 实例化一个:
 *     org.gradle.api.Project 类,并且通过 project 变量使其可以隐式可用
 *  4、项目:
 *     4.1 重要属性:group,name( 就是 maven 中的 artficteId ),version,能确定唯一一个组件
 *     4.2 重要方法:apply()  repositories() dependencies() task()
 */

/**
 *  5、任务
 *     任务对应于 org.gradle.api.Task 类,主要包括任务动作和任务依赖,任务是最小的工作单元,可以定义依赖于其他任务、动作序列、执行顺序
 *     5.1 重要方法:doFirst() doLast() dependsOn() 其中 doLast() 可以写成 <<
 */

/**
 *  6、构建的生命周期
 *     1、初始化:
 *              首先 Gradle 根据构建脚本初始化一个或多个 project 对象,并确定他们的依赖关系
 *     2、配置:
 *              一句话而言就是:初始化任务,详细一点就如下:
 *              根据配置代码生成 task 的依赖顺序 以及 执行顺序
 *              什么是配置代码:除了动作代码以外的代码
 *     3、执行:
 *              主要是执行动作代码,执行完毕后就构建完成了
 *        注意:
 *              根据构建的生命周期来讲,配置代码在执行代码之前执行
 *              因此有些配置代码不能在执行代码中执行,会报错的
 *              除了上面三个生命周期,其实还有三个钩子方法,分别在初始化之后,配置之后,执行之后
 */

/**
 *  7、依赖管理:
 *      意义:不必重复造轮子,解决版本冲突
 *      7.1、工件坐标:
 *         工件可以简单的理解为 jar 包,坐标就是 group、name、version
 *      7.2、仓库:
 *         去哪里找这些依赖,常用的的仓库如下:
 *         这两个是公共仓库,我们可以传也可以依赖下载
 *         mavenCentral
 *         jcenter
 *         这个是本地仓库
 *         mavenLocal
 *         自定义 maven 仓库:这个是最常用的
 *         文件仓库:这个不常用,影响了到处都可构建的初衷
 *      7.3、依赖的传递性
 *           B依赖A,C依赖B,那么C依赖A,这就是依赖的传递性,就因为这种依赖的传递性导致了版本的冲突
 *      7.4、依赖管理的自动化
 *      7.5、依赖管理的阶段:
 *           源代码阶段:编译阶段,运行阶段
 *           测试代码阶段:编译阶段,运行阶段
 *           其实他们阶段与阶段之间也有依赖的不同情况,例如:
 *           运行阶段的依赖大于等于编译阶段
 *           测试阶段的编译/运行依赖大于等于源码阶段的编译/运行阶段
 *           在例如:JDBC 的实现在编译阶段不需要,但在运行阶段需要
 */

/**
 *  8、解决依赖冲突
 *     1、查看依赖报告:
 *        只有查看了依赖报告,才会知道那些有冲突,才能针对性的解决这类问题
 *     2、排除传递性依赖:
 *        排除传递性依赖:
 *        compile ('org.hibernate:hibernate-core:5.2.12.Final'){ exclude(group: '', module: '', //transitive: false) }
 *     强制指定一个版本
 *     configurations.all{
 *         resolutionStrategy{
 *             force "org.hibernate:hibernate-core:5.2.12.Final"
 *         }
 *     }
 *  注意:
 *     当遇到版本冲突时,Gradle 会给我们指定一个最高版本,这个时候如我们不要最高版本,需要修改如下:
 *     configurations.all{
 *         resolutionStrategy{
 *             failOnVersionConflict()
 *         }
 *     }
 *     让默认解决策略失败,用我们自己的策略
 */
group 'com.caisir.gradle'
version '1.0'

//println("this is my print ${project}")

apply plugin: 'java'
apply plugin: 'war'

//configurations.all{
    这样写并不正确呀
    resolutionStrategy{
        failOnVersionConflict()
    }
//}

//configurations.all{
    这样写并不正确呀,测试这个的时候把 L122 那行的 exclude 去掉
//    resolutionStrategy{
//        failOnVersionConflict()
//        force "dom4j:dom4j:1.6"
//    }
//}

repositories {
    maven {
        url ''// 这个是自己公司的 maven 库
    }
    mavenLocal() //这个是本地 maven 库
    mavenCentral() //http://search.maven.org/
}
dependencies {
    compile 'dom4j:dom4j:1.6'
    compile ('org.hibernate:hibernate-core:5.2.12.Final'){exclude(group:"dom4j",module:"dom4j")}//当 L98 可以 build 时 重新 build 一下,查看是否 build 通过
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

def createDir = { path ->
    File file = new File(path)
    if (!file.exists()) {
        file.mkdirs()
    }
}
task makeJavaDir() {
    def paths = ['src/main/java', 'src/main/resources', 'src/main/webapp', 'src/main/caisir']
    paths.forEach(createDir) //在这里也能执行 ,放到 doFirst 也能执行
    doFirst {
        paths.forEach(createDir) //在这里也能执行 ,放到 doFirst 也能执行
    }
}

task makeWebDir() {
    dependsOn "clean", "jar", "war", "makeJavaDir"
    def paths = ['src/test/java', 'src/test/resources', 'src/test/webapp']
    doLast { paths.forEach(createDir) }
}

/**
 *  9、多项目的构建
 *     降低耦合,功能边界清晰,维护方便
 */
学的 有点困了,先到这了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值