2019独角兽企业重金招聘Python工程师标准>>>

随着Android Studio的遍及,不断增加的Android开发者也要开端了解和学习Gradle这款强壮的代码构建东西了。咱们在学习和了解一项新事物的时分,最疾速的办法往往是与已知的事物进行比照,对于熟悉Makefile编译机制的Linux程序员而言,知道和掌握Gradle最佳的办法莫过于比照它们之间的区别了,这篇文章不准备详细介绍Gradle的方方面面,而是希望经过与Makefile的比照帮助Gradle初学者更疾速地了解Gradle的基础和原理。

Makefile是一种办理和编译 Linux C/C++ 项目的东西,而Gradle也是一种代码构建东西,只不过是对于Java言语的,它相同能够经过一些装备文件和脚正本完结代码的依靠、第三方库的引进、编译的主动化装备等功能。

首要说说Makefile,它是由一个个"规矩"构成,每个"规矩"都是由"方针"、"依靠"、"指令"构成, 一个最简略的Makefile如下所示:

1

2

3

4

5

6

7

8

9

.PHONY: clean

all: hello

hello: hello.c

gcc -o hello hello.c

clean:

rm hello

这儿有三个"方针",分别是: "all","hello","clean"

当履行"make"指令时,编译器会默许查找方针"all" ,假如没有"all"则会查找Makefile文件的第一个方针。本示例中有"all"方针,它依靠"hello"方针,因而编译器会转而先构建"hello"方针,构建前, 编译器会先检查"hello"方针是不是需求更新(经过判别"hello"文件与它所依靠的源文件"hello.c"的修正时刻),假如需求,则履行后边的指令,而需求编译的源文件则是经过手动或许相关函数的方法添加到编译指令的参数中去的。

这即是makefile最基地的构建思维,经过一个个"方针"、"依靠"、"指令"来完结悉数项目的关联和编译。那么,咱们也依据这一思维来看看Gradle是怎样完结的。

1. Gradle是怎样辨认源文件的 ?

Gradle是采取了一种"约好优于装备"的思维来完结这一点的,它经过"Plugin"来约好项目的方针和源文件的规划,例如: Java Plugin 界说的源文件规划如图所示:

wKioL1Xdnk2QXnWeAAEXQAiYhPc987.jpg

由该图能够很清楚地看到,Java Plugin 直接约好好了源文件的目录构造,在Gradle中,一般把这些源码目录的装备叫做"SourceSet",同理,Android供给的Android Plugin相同也界说了自个的源文件规划,还加入了如 jni, AndroidManifest.xml 等目录和文件。对于Gradle项目而言,需求在每个代码模块的"build.gradle"文件中界说运用哪一种Plugin, 例如:

1

2

3

4

5

6

7

8

//一般的Java项目

apply plugin: 'java'

//Android Application

apply plugin: 'com.android.application'

//Android Library

apply plugin: 'com.android.library'

2. Gradle是怎样辨认编译方针的 ?

在Gradle中,与Makefile的"方针"相对应的概念是"使命",即"task",Gradle的构建进程,即是履行一条一条"task"使命的进程, 相同,一个"task"也是能够依靠另一个"task"的,这么,经过这种依靠联系,就能够将悉数项目中各个"task"连接到一起了。

与Makefile中手写方针的方法不一样,Gradle将一切的"task"的界说悉数交给Plugin来完结,因为每一种工程类型(Java项目、Android项目等),其构建进程都是迥然不同的,因而为每一种类型的项目界说好了一种通用的Plugin,以后同类型的项目就能够直接运用该Plugin了,十分的灵活和便利。

当咱们在项目中履行"gradle build"指令时,能够看到该项目运用的Plugin详细界说了哪些"task",例如一个典型的Java Plugin界说的"task"如下所示:

1

2

3

4

5

6

7

8

9

10

11

:compileJava

:processResources

:classes

:jar

:assemble

:compileTestJava

:processTestResources

:testClasses

:test

:check

:build

当然,尽管同是Android类型的工程,但不一样的项目究竟还是有装备上的区别,因而,Gradle的Plugin中也能够界说和导出一些特定的"元素"用于传递用户自界说的装备信息,例如: Google供给的 "com.android.application"Plugin 就界说了一个"android"元素,开发者能够在build.gradle中装备该元素的细节,比方界说一些: "项目的ID"、"sdk的版本"、"是不是混杂"等等,例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

android {

compileSdkVersion 21

buildToolsVersion "21.1.1"

defaultConfig {

applicationId "com.jhuster.test"

minSdkVersion 15

targetSdkVersion 21

versionCode 1

versionName "1.0.0"

}

}

3. Gradle指令怎样用 ?

gradle指令与make指令相似,都是用来履行编译/整理使命的,make指令默许查找当时目录下的Makefile文件,而且开端构建指令参数中所指定的"方针",例如:

1

2

$make all

$make clean

相同,gradle指令也是相似的用法,例如:

1

2

3

4

$gradle build        //构建和打包悉数项目

$gradle clean        //清除之前的构建

$gradle test         //履行测验

$gradle compileJava  //编译java

4. Gradle是怎样引进第三方库的 ?

对于Makefile而言,通常需求将第三方库的源码下载下来,编译为库后,放入到工程目录下,然后修正Makefile文件,在gcc/g++的编译连接参数中引证该第三方库的,例如:

1

2

hello: hello.c

gcc -o hello hello.c -L/libs/foo.a

而Gradle则是经过build.grade文件中的dependencies来装备的,例如:

1

2

3

4

dependencies {

compile files('libs/foo.jar')  //以jar的方法引证

compile project(':foo')         //以library工程源码的方法引证

}

别的,Gradle还支撑相似Ubuntu软件源库房的方法来引证第三方库,开发者能够将自个的第三方库上传到一些支撑Gradle的基地库房中,这么,其他人就能够经过装备build.gradle直接完结对第三方库的引证了,代码构建的时分Gradle会主动完结第三方库的下载和连接。比照常用的两个个基地库房: jcenter,mavenCentral。

例如: 咱们引证jcenter库房的okhttp库,则build.gradle装备如下:

1

2

3

4

5

6

7

8

9

allprojects {

repositories {

jcenter()

}

}

dependencies {

compile 'com.squareup.okhttp:okhttp:2.4.0'

}

5. 小结

Gradle真的很强壮很灵活,它将最基地的构建规都则交给了Plugin来完结,这么,轻松完结了构建进程的通用性,开发者只需求重视事务逻辑,以及少量的装备即可完结主动化编译和布置的进程,比较于Linux手写makefile要便利许多。好了,对于Gradle和Makefile的简略比照就介绍到这儿了,最后引荐一个网站给大家 http://www.keymb.com/

转载于:https://my.oschina.net/u/2446284/blog/498568

Gradle与Makefile构建工具的对比相关推荐

  1. 使用 Linux 子系统部署 Node、Gradle 项目的构建工具

    最近的一个项目,由三个 Gradle「Java」工程以及一个 Node「Vue.js」工程组成.为了使用 Linux 下的各种工具提升效率,本文探讨 Linux 子系统的使用及在该系统下,Java.N ...

  2. Java构建工具:Maven与Gradle的对比

    在Java码农的世界里,构建工具一直是一个不可或缺的元素.一开始,世上是只有一个构建工具的那就是Make后来发展为GNU Make.但是由于需求的不断涌现,这个小圈子里又逐渐衍生出其他千奇百怪的构建工 ...

  3. Java和Android构建工具Gradle深入了解

    Gradle3.0编程与自动化构建 gradle是一款最新的,功能强大的构建工具,它使用程序代替传统的XML配置,构建项目更加灵活.gradle有丰富的第三方插件. Gradle相关介绍及开发环境搭建 ...

  4. Java项目构建工具Gradle是否可以完全替代Maven?

    前言 在Java项目的开发中,需要引入自动化构建工具来帮助我们管理项目的外部依赖包.项目编译.打包等工作.Gradle和Maven是Java世界中两个重要的自动化构建工具,在项目中我们在两者之间如何选 ...

  5. 【Groovy】构建工具 ( 构建工具引入 | Gradle 构建工具作用 | 传统的依赖管理 )

    文章目录 一.构建工具引入 二.Gradle 构建工具作用 三.传统的依赖管理 一.构建工具引入 构建工具 用于 管理代码项目的 依赖 , 编译 , 测试 , 发布 周期 ; 常见的构建工具 : An ...

  6. kafka maven没有下载_构建工具的进化:ant, maven, gradle

    在讲解基础知识的过程中,我们也要动手去写.而Java发展到现在,可以帮助我们写程序,构建,发布的工具有一大堆.今天就来讨论一下构建工具.在开始之前,我们先讲点别的. 如何学习琳琅满目的框架和工具 学J ...

  7. 更快的Maven构建工具mvnd和Gradle哪个性能更好?

    作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) Maven 作为经典的项目构建工具相信很多人已经用很久了,但如果体验过 Gradl ...

  8. Maven学习总结(56)—— Maven、Gradle 、 Ant 哪一个构建工具最适合你?

    前言 根据相关报告,大多数 Java 开发人员使用 Maven 作为他们的主要构建工具,在 67% 的受访者中.排名第二和第三的分别是 20% 的 Gradle 和 11% 的 Ant.这三个构建工具 ...

  9. aliyun gradle 代理_gradle:现代高效的java构建工具

    相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具.但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: 一来Maven的配置文件是XML格式的,假如 ...

  10. 【Linux】三、Linux 环境基础及开发工具使用(上篇)|开发工具|编辑器-vim使用|sudo提升权限问题|编译器 - gcc/g++使用|项目自动化构建工构建工具-make/Makefile

    目录 一.开发工具 二.Linux编辑器 - vim使用 2.1 vim 的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2. ...

最新文章

  1. 【Live555】live555源码详解(一):BasicUsageEnvironment、UsageEnvironment
  2. C++中一些类和数据结构的大小的总结
  3. 2020年Spring Cloud最后一个大版本发布!
  4. python批量下载网页文件-Python批量下载网页图片详细教程
  5. 如何卸载安装有问题的devexpress组件?
  6. 反射 reflect
  7. BZOJ2490 Zombie’s Treasure Chest
  8. VisualStudio2017下载与安装教程详解
  9. RegOpenKeyEx 返回值 2
  10. 华为三星和解;联想全球首发折叠电脑;苹果回应美高院裁决 | 极客头条
  11. Ant Design Pro引入Echarts 报错Unexpected token
  12. image1载入大图片时如果stretch=true,image1会显示出大图片的缩图,那么如何将这个缩图镜像复制一份赋值给另一个image2的picture呢?...
  13. 爱了!再来推荐5个Java项目开发快速开发脚手架。项目经验和私活都不愁了~
  14. 巨量引擎api对接 php,巨量引擎Marketing API 现已开放多种创意能力接口
  15. 存款机不认的新版人民币
  16. 在Excel表格中如何设置字体随单元格大小变化
  17. 百度竞价推广的真正意义是什么?
  18. 同花顺_知识_看盘技法
  19. 六、Python3自动化运维——电子邮件 smtplib模块
  20. ORA-00371: not enough shared pool memory, should be atleast 62198988 bytes

热门文章

  1. Java面试题之 static执行顺序
  2. java实现求数组中元素第二大的元素
  3. Pausing and Resuming an Activity
  4. 深入理解Java堆内存分配策略(Xmx和Xms)
  5. BytePS源码解析
  6. thinkphp 3.+ Apache url重写问题(.htaccess)
  7. Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交
  8. Android Studio单元测试入门
  9. Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
  10. win32 api 显示一张位图的简单代码,释疑用的。