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

时间:2021-11-05 04:13:10

一、项目自动构建介绍

作为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会自动确定它所依赖的阶段如编译源码和运行测试事先被执行。

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

和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项目构建(1)——Gradle的由来

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

配置完成验证,在任意位置输入 gradle -v

C:\Users\lxq_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:\Users\lxq_x\Desktop>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:\Users\lxq_x\Desktop>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。

Gradle项目构建(1)——Gradle的由来的更多相关文章

  1. 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. 【转】第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    原文网址:http://www.cnblogs.com/smyhvae/p/4456420.html [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.c ...

  3. Android Studio 入门级教程(三):gradle项目构建

    声明 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4456420.html [系列] Andr ...

  4. 项目构建工具Gradle的使用入门(参考,只表明地址)

    Gradle入门介绍:简介 http://blog.jobbole.com/71999/ Gradle入门介绍:第一个Java项目 http://blog.jobbole.com/72558/ Gra ...

  5. 项目构建工具gradle

    1.安装 https://gradle.org/install 2.构建一个项目 https://guides.gradle.org/creating-new-gradle-builds/ 3.bui ...

  6. &lbrack;转&rsqb;第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    目录: 1.gradle的概念 2.gradle配置jar包,和libs文件夹导入jar包的区别 3.签名打包: (1)Studio (2)命令行 (3)gradle wrapper的原理 4.Bui ...

  7. Android studio第一次使用配置(三)gradle项目构建

    1.gradle的概念 2.gradle配置jar包.和libs目录导入jar包的差别 3.签名打包: (1)Studio (2)命令行 (3)gradle wrapper的原理 4.BuildCon ...

  8. gradle 项目构建以及发布maven 私服&amp&semi;&amp&semi; docker 私服构建发布

    1. 项目结构   2. 代码说明 a. Dockerfile docker 构建的 FROM openjdk:8-jre-alpine WORKDIR /appdemo/ COPY build/di ...

  9. java之项目构建工具Gradle

    介绍 Java 作为一门世界级主流编程语言,有一款高效易用的项目管理工具是 java 开发者共同追求的心愿和目标.显示 2000 年的 Ant,后有 2004 年的 Maven 两个工具的诞生,都在 ...

随机推荐

  1. SQL Server分布式数据库技术&lpar;LinkedServer&comma;CT&comma;SSB&rpar;

    SQL Server自定义业务功能的数据同步 在不同业务需求的驱动下,数据库的模块化拆分将会面临一些比较特殊的业务逻辑处理需求.例如,在数据库层面的数据同步需求.同步过程中,可能会有一些比较复杂的业务 ...

  2. AutoIT脚本的语法特征

    这里主要介绍AutoIT的脚本语法特征,包括变量.关键字.宏.设置选项等,详细的语法细节,可以参考其用户手册,也可以去AutoIT中文论坛(www.autoit.net.cn)交流. 1. 变量 Au ...

  3. 通过AOP 实现异常统一管理

    package com.zhang.shine.cache; import java.lang.reflect.Method; import org.aspectj.lang.ProceedingJo ...

  4. GIS应用及OpenGIS介绍

    转自:http://blog.csdn.net/cdl2008sky/article/details/7266680 GIS的三大应用第一类是*应用,“电子政务” 是当今*加强信息化建设的新方向, ...

  5. jquery表格提交验证

    在表格中的验证 1.body中的内容 <form action="http://www.qq.com" id="form1"><table w ...

  6. Java9相关资料&lpar;JShell简易教程等&rpar;

    资源 Java9官网下载地址 Java9官方教程 JShell(Java Shell) 参考资料: JShell User Guide Java9先睹为快:JShell动手实践 以下大部分内容均来自该 ...

  7. mybatis查询异常-Error querying database&period; Cause&colon; java&period;lang&period;ClassCastException&colon; org&period;apache&period;ibatis&period;executor&period;ExecutionPlaceholder cannot be cast to java&period;util&period;List

    背景,mybatis查询的时候直接取的sqlsession,没有包装成SqlSessionTemplate,没有走spring提供的代理. 然后我写的获取sqlsession的代码没有考虑到并发的情况 ...

  8. 未能加载文件或程序集&OpenCurlyDoubleQuote;SuperMap&period;Data&period;dll”

    重新配置的新的开发环境,使用的是原来的工程文件,编译通过,运行报错:"未能加载文件或程序集"SuperMap.Data.dll"或它的某一个依赖项.找不到指定的模块&qu ...

  9. 文件上传—SSM框架文件上传

    1.准备上传下载的api组件 <dependency> <groupId>commons-io</groupId> <artifactId>common ...

  10. thread msg

    提取的nordic rf51xx/rf52xx sdk中的线程间消息通信机制,非常简洁 demo.c #include <stdio.h> #include <stdlib.h&gt ...