新一代构建工具Gradle(二)

构建脚本的概要

Gradle构建中的两个基本概念是项目(Project)和任务(Task),每个构建至少包含一个项目,项目中包含一个或多个任务。在多项目构建中,一个项目可以依赖其他项目;类似的,任务可以形成一个依赖关系图来确保他们的执行顺序。

新一代构建工具Gradle(二)

项目(Project)

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

属性

  • group、name、version

方法

  • apply、dependencies、repositories、task
  • 属性的其他配置方式:ext、gradle.properties

 

任务(Task)

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

  • dependsOn
  • doFirst、doLast<<

自定义任务--创建一个目录结构

在build.gradle中编写

//自定义任务
def createDir={
    path->
        File dir = new File(path);
        if(!dir.exists()){
            dir.mkdirs();
        }
}

task makeJavaDir(){
    def paths=['src/config'];
    doFirst{
        paths.forEach(createDir);
    }
}

构建生命周期

初始化 ---> 配置--->执行

依赖管理

概述

几乎所有的基于JVM的软件项目都需要依赖外部类库来重用现有的功能。自动化的依赖管理可以明确依赖的版本,可以解决因传递性依赖带来的版本冲突。 

依赖的传递性

自动化依赖管理

依赖管理阶段配置

  • 源代码的两个阶段:  compile、runtime
  • 测试代码的两个阶段   :testCompile、testRuntime

依赖阶段关系

新一代构建工具Gradle(二)

解决版本冲突

  1. 查看依赖报告
  2. 排除传递性依赖
  3. 强制指定一个版本

具体解决方案:

  • 修改默认解决策略---------只要一遇到版本冲突就报错误
configurations.all{
    resolutionStrategy{
        failOnVersionConflict();
    }

}
  • 强制指定一个版本
configurations.all{
    resolutionStrategy{
        force 'org.slf4j:slf4j-api:1.7.24'
    }
}

多项目构建

在企业项目中,包层次和类关系比较复杂,把代码拆分成模块通常是最佳实践,这需要你清晰的划分功能的边界,比如把业务逻辑和数据持久化划分来。项目符合高内聚低耦合时,模块化就变得很容易,这是非常好的软件开发实践的方法。

  • 项目模块化
  • TODO模块依赖关系

新一代构建工具Gradle(二)

  • 配置子项目----配置要求
  1. 所有项目应用Java插件
  2. web子项目打包成war包
  3. 所有项目添加logback日志功能
  4. 统一配置公共属性

新一代构建工具Gradle(二)

比如说respository这个子项目需要依赖modle的支持,web需要respository的支持,所以就需要进行配置

在respository中的build.gradle中配置

dependencies {
    //依赖modle
    compile project(":modle");
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

在web中的build,gradle中配置

dependencies {
    //依赖respository
    compile project(":repository")
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

所以就可以看得见他们是层级的依赖关系

总结

gradle构建项目流程:

新建项目(IDE快速新建)->开发(gradle配置依赖)->测试(gradle自动测试)->打包(gradle插件自动打包)->发布(gradle插件自动发布)

新一代构建工具Gradle(二)
本人公众号