叁叁肆

这个世界会好吗

453篇博客

gradle基本知识

叁叁肆2018-09-21 11:34

本文来自网易云社区

作者:孙有军


ps:其实很早就打算在这边来写点东西,多次从其他地方搬blog,可是搬了好几次也没有成功。悲催,闲话少说,言归正传。 本篇内容主要是阅读 http://android.jobbole.com/71999/该文章后进行整理 而来。

  • gradle 中有两个概念: 项目,任务

  • 项目:是指我们的构建产物(比如jar)或者实施产物(将应用程序部署到生产环境),一个项目包含一个或者多个任务。 任务:是指不可分割的最小工作单元,执行构建工作(比如编译项目或者执行测试)。 每一次的gradle构建都包含有一个或者多个项目 :Build (1)——(n) project(1)—(n)task

  • gradle配置文件

Gradle构建脚本(build.gradle)指定了一个项目和它的任务。 Gradle属性文件(gradle.properties)用来配置构建属性。 Gradle设置文件(gradle.settings)对于只有一个项目的构建而言是可选的,如果我们的构建中包含多于一个项目,那么它就是必须的,因为它描述了哪一个项目参与构建。每一个多项目的构建都必须在项目结构的根目录中加入一个设置文件。

gradle插件,所有有用的特性都有gradle插件提供,以下是gradle标准插件地址http://www.gradle.org/docs/current/userguide/standard_plugins.html

插件能够在项目中添加新任务 为新加入的任务提供默认配置,这个默认配置会在项目中注入新的约定(如源文件位置)。 加入新的属性,可以覆盖插件的默认配置属性。 为项目加入新的依赖

  • 插件的使用方式可以通过名称或者类型来指定:
 apply plugin: ‘android'  apply plugin: ‘com.android’

java项目默认的项目结构如下:

src/main/java目录包含了项目的源代码。 src/main/resources目录包含了项目的资源(如属性文件)。 src/test/resources目录包含了测试资源。

所有我们构建生成的文件都会在build目录下被创建,这个目录涵盖了以下的子目录,

classes目录包含编译过的.class文件。 libs目录包含构建生成的jar或war文件。

  • 名词解释

assemble任务会编译程序中的源代码,并打包生成Jar文件,这个任务不执行单元测试。仅仅执行项目打包所必须的任务集。 build任务会执行一个完整的项目构建。任务执行项目打包所必须的任务集,以及执行自动化测试。 compileJava任务会编译程序中的源代码。

assemble,build这两个命令都会在build/libs目录中创建一个file-java-project.jar文件。默认创建的Jar文件名称是由这个模版决定的:[projectname].jar,此外,项目的默认名称和其所处的目录名称是一致的。因此如果你的项目目录名称是first-java-project,那么创建的Jar文件名称就是first-java-project.jar。

gradle tasks 命令可以得到一个可运行任务及其描述的完整列表

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class':'xxx.HelloWorld'
    }
}


repositories {
    ivy {
        url  "http://ivy.petrikainulainen.net/repo"
    }
}
repositories {
    ivy {       
        url "../ivy-repo"
    }

Maven仓库: 同Ivy仓库使用方式类似,只需将ivy改为maven,地址相应换成maven对应的地址,在加入Maven仓库时,Gradle提供了三种“别名”供我们使用,它们分别是:http://www.gradle.org/docs/current/userguide/dependency_management.html#sub:maven_repo

mavenCentral()别名,表示依赖是从Central Maven 2 仓库中获取的。 jcenter()别名,表示依赖是从Bintary’s JCenter Maven 仓库中获取的。 mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。

例如采用mavenCentral()

repositories {
    mavenCentral()
}

Flat directory仓库:http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:flat_dir_resolver

repositories {
    flatDir {
        dirs “lib” // 表示从lib目录下查找,可以写多个目录, libA, libB
    }
}
  • 配置依赖:配置完项目仓库后,可以声明其中的依赖: 指定依赖的配置,声明所需的依赖

在Gradle中,依赖是按照指定名称进行分类的,这些分类被称为配置项,我们可以使用配置项声明项目的外部依赖。Java插件指定了若干依赖配置项,其描述如下:当项目的源代码被编译时,

compile配置项中的依赖是必须的。 runtime配置项中包含的依赖在运行时是必须的。 testCompile配置项中包含的依赖在编译项目的测试代码时是必须的。 testRuntime配置项中包含的依赖在运行测试代码时是必须的。 archives配置项中包含项目生成的文件(如Jar文件)。 default配置项中包含运行时必须的依赖。

声明配置依赖:最普遍的依赖称为外部依赖,这些依赖存放在外部仓库中。一个外部依赖可以由以下属性指定:

group属性指定依赖的分组(在Maven中,就是groupId)。 name属性指定依赖的名称(在Maven中,就是artifactId)。 version属性指定外部依赖的版本(在Maven中,就是version)。

eg:分组是groupA,名称是nameA,verion为1.0,依赖脚本为:

dependencies {
    compile group:’groupA', name: ‘nameA', version: ‘1.0’
    //以下是快捷方式, compile可以替换成上面的testCompile等
    compile ‘groupA:nameA:1.0'
}

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区