• Gradle项目构建(1)——Gradle的由来


    一、项目自动构建介绍

    作为Java的开发者对eclipse都非常熟悉,其实eclipse就是居于ant来构建项目的,我们先来看看为什么需要自动化构建项目。

    1、为什么我们要自动化构建项目

    可以假设我们如果不适用eclipse或者其他集成开发环境去开发我们的项目,这个对于当今的软件来说几乎不可能,项目自动化构建可以帮助我们完成一些重复性规律的工作,避免一些人为造成的错误。

    2、项目自动化的类型

    按需构建
    按需构建的典型用例就是用户在自己的机器上触发构建,比如使用版本控制系统(VCS),大多数情况下,用户在命令行执行一个脚本去运行预先定义的有序任务,通常这种类型的构建一天要运行多次。
    触发构建
    这种构建一般是在向版本控制系统中提交代码时触发,然后开始自动构建一些任务。
    预定构建
    预定构建式一种基于事件的程序调度方案,比如每隔15分钟执行一次,这种构建特别适用于生成报告或者项目的文件操作。

    二、Java构建工具

    1、Apache Ant

    Apache Ant(Another Neat Tool)是一个用Java编写的开源构建工具,其主要目的是在Java项目中为常用任务提供自动化,例如编译源代码、运行单一测试、打包和生成Javadoc文档。
    在Ant中构建脚本由三个基本元素组成:一个 project、多个taget和可用的task.

    <project name="shuihan">
        <target name="init">
            <mkdir dir="build"/>
        </target>
    
        <target name="compile" depends="init">
            <javac srcdir="src" destdir="build"/>
        </target>
    </project>

    上面这段代码就是一个简单的构建,包含两个target,其中depends是依赖的意思,name=”init”先执行,然后才执行name=”compile”
    Ant没有对如何定义构建的结构强加任何限制,这样就可以让构建适应千变万化的项目变的更加容易,但是尽管有这样的灵活性,它还是存在一些缺点。

    • 使用xml作为构建定义语言就导致构建脚本过于臃肿和啰嗦
    • 复制的构建逻辑(比如if-then/if-then-else)会导致又长又难以维护的构建。
    • 因为ant没有任何限制导致同一个项目可以出现多个构建,不容易维护和让别人理解。

    2、Apache Maven

    简单来说Maven和Ant的灵活刚好相反,提供了标准的项目布局和统一的项目构建生命周期,Maven的核心功能也可以通过开发定制插件来扩展。
    Maven基于构建生命周期的思想。每个项目都确切的知道有哪些步骤去执行构建/打包和发布应用程序。在构建生命周期中每个步骤都称为一个阶段。这些阶段会被有序的执行,当在命令行中运行构建时,你想要执行的阶段是固定的。假设你要调用打包这个阶段,Maven会自动确定它所依赖的阶段如编译源码和运行测试事先被执行。
    这里写图片描述
    和Ant一样,Maven看似强大的背后也隐藏着缺点

    • Maven推荐一个默认结构的生命周期,常常会太过限制。
    • 为Maven写定制的扩展过于累赘,需要去学习Mojos。
    • 将插件升级到最新版本可能会导致脆弱和不稳定的构建。

    3、Gradle

    基于上面Ant和Maven的种种不足,新一代项目构建工具Gradle出现了,Gradle具有以下特点

    • 一种可切换的,像maven一样的基于约定的构建框架,却又从不锁住你(约定优于配置)
      Switchable, build-by-convention frameworks a la Maven. But we never lock you in!
    • 强大的支持多工程的构建
    • 强大的依赖管理(基于Apache Ivy),提供最大的便利去构建你的工程
      Language for dependency based programming
    • 全力支持已有的Maven或者Ivy仓库基础建设
    • 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下
    • 基于groovy脚本构建,其build脚本使用groovy语言编写
    • 具有广泛的领域模型支持你的构建A rich domain model for describing your build.

    三、Gradle的安装和用法

    1、安装

    官网下载地址:https://services.gradle.org/distributions/
    添加环境变量
    这里写图片描述
    这里写图片描述
    配置完成验证,在任意位置输入 gradle -v

    C:Userslxq_x>gradle -v
    
    ------------------------------------------------------------
    Gradle 2.12-rc-1
    ------------------------------------------------------------
    
    Build time:   2016-03-07 17:41:18 UTC
    Build number: none
    Revision:     b29fbb64ad6b068cb3f05f7e40dc670472129bc0
    
    Groovy:       2.4.4
    Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
    JVM:          1.8.0_05 (Oracle Corporation 25.5-b02)
    OS:           Windows 8.1 6.3 amd64

    2、简单使用

    每个Gradle构建都是以一个脚本开始的。Gradle构建脚本默认的名字是build.gradle.当在shell中执行gradle命令时,Gradle会去寻找名字为build.gradle的文件。如果找不到,会显示一个帮助信息。

    task helloworld{
        doLast{
            println 'Hello World'
        }
    }

    输出结果:

    C:Userslxq_xDesktop>gradle helloworld
    :helloworld
    Hello World
    
    BUILD SUCCESSFUL
    
    Total time: 3.275 secs

    再来看一个多任务的

    task startSession << {
        chant()
    }
    
    def chant(){
        ant.echo(message: 'Repeat after me...')
    }
    
    3.times{
        task "yayGradle$it" << {
            println 'Gradle rocks'
        }
    }
    
    yayGradle0.dependsOn startSession
    yayGradle2.dependsOn yayGradle1, yayGradle0
    task groupTherapy(dependsOn: yayGradle2)

    输出结果:

    C:Userslxq_xDesktop>gradle gT
    :startSession
    [ant:echo] Repeat after me...
    :yayGradle0
    Gradle rocks
    :yayGradle1
    Gradle rocks
    :yayGradle2
    Gradle rocks
    :groupTherapy
    
    BUILD SUCCESSFUL
    
    Total time: 3.979 secs

    上面代码中引入了关键字dependsOn来说明task之间的依赖关系,Gradle会确保被依赖的task总会在定义该依赖的task之前执行。
    Gradle还提供了一个很好的特性来定义动态task(如上面的3.times), times方法创建3个新的task。

  • 相关阅读:
    Git简介
    Git之 git status、git diff 的基本使用
    Git之撤销修改 git checkout file、git reset HEAD file 的使用
    git连接gitlab远程仓库
    Git版本回退及 git log 、 git reset hard commit_id 的基本使用
    Git创建版本库及git init 、add 和 commit m 的基本使用
    Git之工作区和暂存区
    Git的由来及分布式版本控制和集中式版本控制的区别
    MariaDB 主从同步与热备
    MariaDB 用户与权限管理
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468466.html
Copyright © 2020-2023  润新知