1.首先我们直接上代码介绍:

// Top-level build file where you can add configuration options common to all sub-projects/modules.  buildscript { repositories { //这里可以看到是指明的jcenter(), 之前版本则是mavenCentral() // jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。  jcenter() } dependencies { //声明了android gradle plugin的版本为gradle plugin 1.2.3 classpath 'com.android.tools.build:gradle:1.2.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files  } } allprojects { repositories { jcenter() } }

buildscript中的声明是gradle运行脚本自身需要使用的资源(可以理解为脚本运行环境构建),可以声明的资源包括依赖项、第三方插件、maven仓库地址等。而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源

这里我们先介绍一下maven仓库

首先什么是maven仓库?

在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立一个项目,你都需要建立这样的一个/lib目录,然后复制一对jar文件,这是很明显的重复。重复永远是噩梦的起点,多个项目不共用相同的jar文件,不仅会造成磁盘资源的浪费,也使得版本的一致性管理变得困难。此外,如果你使用版本管理工具,如SVN(你没有使用版本管理工具?马上试试SVN吧,它能帮你解决很多头疼的问题),你需要将大量的jar文件提交到代码库里,可是版本管理工具在处理二进制文件方面并不出色。

Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使用。

简言之,Maven仓库能帮助我们管理构件(主要是JAR)。

gradle是由groovy语言编写的,支持groovy语法,可以灵活的使用已有的各种ant插件、基于jvm的类库,这也是它比maven、ant等构建脚本强大的原因。虽然gradle支持开箱即用,但是如果你想在脚本中使用一些第三方的插件、类库等,就需要自己手动添加对这些插件、类库的引用。而这些插件、类库又不是直接服务于项目的,而是支持其它build脚本的运行。所以你应当将这部分的引用放置在buildscript代码块中。gradle在执行脚本时,会优先执行buildscript代码块中的内容,然后才会执行剩余的build脚本。

举个例子,假设我们要编写一个task,用于解析csv文件并输出其内容。虽然我们可以使用gradle编写解析csv文件的代码,但其实apache有个库已经实现了一个解析csv文件的库供我们直接使用。我们如果想要使用这个库,需要在gradle.build文件中加入对该库的引用。

你在buildscript的repositories 的声明中使用的是jcenter(),他可以理解为一个新的中央远程仓库,兼容maven中心仓库,而且性能更优

2.

build.gradle:

buildscript { repositories { mavenLocal() mavenCentral() } dependencies { classpath 'org.apache.commons:commons-csv:1.0' } } import org.apache.commons.csv.* task printCSV() { doLast { def records = CSVFormat.EXCEL.parse(new FileReader('config/sample.csv')) for (item in records) { print item.get(0) + ' ' println item.get(1) } } }

buildscript代码块中的repositories和dependencies的使用方式与直接在build.gradle文件中的使用方式几乎完全一样。唯一不同之处是在buildscript代码块中你可以对dependencies使用classpath声明。该classpath声明说明了在执行其余的build脚本时,class loader可以使用这些你提供的依赖项。这也正是我们使用buildscript代码块的目的。

而如果你的项目中需要使用该类库的话,就需要定义在buildscript代码块之外的dependencies代码块中。所以有可能会看到在build.gradle中出现以下代码:

build.gradle:

repositories { mavenLocal() mavenCentral() } dependencies { compile 'org.springframework.ws:spring-ws-core:2.2.0.RELEASE', 'org.apache.commons:commons-csv:1.0' } buildscript { repositories { mavenLocal() mavenCentral() } dependencies { classpath 'org.apache.commons:commons-csv:1.0' } } import org.apache.commons.csv.* task printCSV() { doLast { def records = CSVFormat.EXCEL.parse(new FileReader('config/sample.csv')) for (item in records) { print item.get(0) + ' ' println item.get(1) } } }

更多相关文章

  1. 在使用ListFragment的setEmptyText时报java.lang.IllegalStateEx
  2. JNI基础实验一:调用.so文件--友善之臂Tiny210 android 串口/pwm/A
  3. Ubuntu下android源码下载
  4. Android之ProGuard混淆器
  5. Android下使用iCal4j库
  6. 查看基于Android(安卓)系统单个进程内存、CPU使用情况的几种方法
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. (转)Android_GPS
  2. Android(安卓)-- Service的开启关闭与生
  3. 【Android】Android实现截取当前屏幕图片
  4. android中sqlite操作
  5. Android向通讯录添加联系人的一般方法
  6. 关于使用adb命令安装apk到手机中的问题
  7. Android(安卓)Snake
  8. Android中日志信息的打印方式
  9. Android在TextView中设置图片显示问题
  10. Android—自动弹出软键盘