Gradle和Maven仓库介绍

2021-01-21 10:34:48 浏览数 (1)

image.png

Gradle 介绍

Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。

Gradle不单单是一个配置脚本,它的背后是几门语言,如果硬让我说,我认为是三门语言。

  • Groovy Language
  • Gradle DSL
  • Android DSL

DSL的全称是Domain Specific Language,即领域特定语言,或者直接翻译成“特定领域的语言”,,其实就是这个语言不通用,只能用于特定的某个领域,俗称“小语言”。因此DSL也是语言。

image.png

Groovy和Java

Groovy是一门jvm语言,它最终是要编译成class文件然后在jvm上执行,所以Java语言的特性Groovy都支持,我们完全可以混写Java和Groovy。

Groovy提供了更加灵活简单的语法,大量的语法糖以及闭包特性可以让你用更少的代码来实现和Java同样的功能。

类似解析xml文件,Groovy就非常方便,只需要几行代码就能搞定,而如果用Java则需要几十行代码。

安装Gradle

在Android Studio中新建项目成功后会下载Gradle。

Gradle下载后路径:

  • Mac上默认 /Users/<用户名>/.gradle/wrapper/dists 目录
  • Win上默认 C:Documents and Settings<用户名>.gradlewrapperdists 目录

目录下有个 gradle-x.xx-all 的文件夹。

如果下载实在太慢,可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下,不过还是建议让它直接下载的好。

Maven 仓库

image.png

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。

Maven 仓库有三种类型:

  • 本地(local)
  • 中央(central)
  • 远程(remote)
本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。

中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。

中央仓库的关键概念:

  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

要浏览中央仓库的内容,maven 社区提供了一个 URL:maven仓库 。使用这个仓库,开发人员可以搜索所有可以获取的代码库。

远程仓库

如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。

为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

Gradle加载库使用

Gradle中有多个maven {}配置段,分为以下几种可选配置:

配置

含义

mavenLocal()

直接使用~/.m2/作为maven仓库的路径

mavenCentral()

使用maven中央仓库http://central.maven.org/作为maven仓库的路径

jcenter()

使用jcenter仓库http://jcenter.bintray.com/作为maven仓库路径,在国内通常比mavenCentral()快很多

maven { url: '/path/to/custom/url' }

自定义的maven仓库路径

根目录下的gradle文件

在我们的工程的根目录下的gradle文件配置

代码语言:javascript复制
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
         //默认加载所需类库都会去jcenter中加载  如果没有找对对应的类库则会去我们配置的Maven仓库中查找
        jcenter()
        maven{
            //配置Maven仓库的地址
            url "http://repo.springsource.org/libs-milestone-local"
        }
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

可以看见jcenter() 在app的目录下的build.gradle文件里.

以及会看到 compile 'com.google.gson:gson:2.2.4'之类的写法

com.google.gson:gson:2.2.4这个库其实在jcenter里边有 ,如果加载一个类库jcenter中没有,那么就会去URL配置的Maven仓库中查找。

app目录下的gradle文件

配置好上面的文件后 ,我们需要在 app目录下的build.gradle中去引用所需要的类库:

代码语言:javascript复制
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:support-v4:25.1.1'
    testCompile 'junit:junit:4.12'
    compile 'com.gopivotal.manager:common:1.2.1.RELEASE'
}

0 人点赞