Gradle教程第一章:1.5依赖关系

Posted 安卓开发资源分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle教程第一章:1.5依赖关系相关的知识,希望对你有一定的参考价值。


Gradle教程第一章:1.5依赖关系



1.5

依赖关系管理基础知识

目录

1.5依赖关系管理是什么?

1.5.1声明你自己的依赖

1.5.2依赖配置

1.5.3外部依赖关系

1.5.4存储库

1.5.5出版的工件

本章将介绍一些Gradle依赖关系管理的基础。


Gradle教程第一章:1.5依赖关系


1.5 赖关系管理是什么?

非常粗略地说,依赖关系管理由两个部分组成。首先,Gradle需要了解您的项目需要构建或运行的内容,以便找到它们。我们将这些传入的文件称为项目的依赖项。其次,Gradle需要构建和上传项目产生的东西。我们将这些即将发布的文件称为项目的出版物。让我们更详细地看看这两件事:

大多数项目并不是完全独立的。它们需要由其他项目构建的文件,以便进行编译或测试等等。例如,为了在项目中使用Hibernate,当我编译源代码时,需要在类路径中包含一些Hibernate jar。为了运行我的测试,我可能还需要在测试类路径中包含一些额外的jar,比如特定的JDBC驱动程序或Ehcache jar。

这些传入的文件构成项目的依赖项。Gradle允许您告诉它您的项目的依赖项是什么,以便它能够处理这些依赖项,并使它们在您的构建中可用。依赖关系可能需要从远程Maven或Ivy存储库下载,或者位于本地目录中,或者可能需要在同一个多项目构建中由另一个项目构建。我们将此过程称为依赖解析。

请注意,该特性比Ant具有主要优势。使用Ant,您只能指定特定jar的绝对或相对路径来加载。对于Gradle,您只需声明您的依赖项的“名称”,而其他层则决定从哪里获取这些依赖项。通过添加Apache Ivy可以从Ant获得类似的行为,但是Gradle做得更好。通常,项目的依赖关系本身就有依赖性。例如,Hibernate core要求在它运行的类路径上有几个其他的库。因此,当Gradle为您的项目运行测试时,它也需要找到这些依赖项并使它们可用。我们称之为传递性依赖。

大多数项目的主要目的是构建一些在项目之外使用的文件。例如,如果您的项目产生一个Java库,您需要构建一个jar,或者一个源jar和一些文档,并在某个地方发布它们。这些输出文件构成了项目的出版物。Gradle也会为你处理这个重要的工作。您声明您的项目的出版物,而Gradle负责构建它们并将它们发布到某个地方。“发布”的确切含义取决于你想做什么。您可能希望将这些文件复制到本地目录,或者将它们上传到远程Maven或Ivy存储库中。或者您可以在同一个多项目构建中使用另一个项目中的文件。我们称此过程为发布。




Gradle教程第一章:1.5依赖关系
1.5.1声明你自己的依赖

声明自己的依赖

声明自己的依赖

 

声明自己的依赖

让我们看一些依赖项声明。这里有一个基本的构建脚本:

1.5.1.1声明依赖性

build.gradle

apply plugin: 'java'


repositories {

    mavenCentral()

}


dependencies {

    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'

    testCompile group: 'junit', name: 'junit', version: '4.+'

}


这是怎么回事?这个构建脚本介绍了项目的一些内容。首先,它声明Hibernate核心3.6.7。最后需要编译项目的生产源。通过暗示,在运行时还需要Hibernate core及其依赖项。构建脚本还指出,任何junit > = 4.0都需要编译项目的测试。它还告诉Gradle在Maven中央存储库中查看需要的任何依赖项。下面的部分将详细介绍。




Gradle教程第一章:1.5依赖关系
1.5.2 依赖配置

配置是一组命名的依赖项和工件。配置有三个主要目的:

1)声明依赖性

插件使用配置使构建作者可以很容易地声明在执行由插件定义的任务期间需要的其他子项目或外部构件。

2)解决依赖关系

插件使用配置来查找(并可能下载)对其定义的任务的输入。

3)将构件进行消费

这个插件使用配置来定义它为其他项目所生成的工件。考虑到这三个目的,让我们来看看Java库插件定义的一些标准配置。

4)实现

需要编译项目的生产源的依赖项,但这不是项目公开的api的一部分。该配置是用于声明依赖项的配置示例。

5)runtimeClasspath

生产类在运行时需要的依赖关系。默认情况下,这包括在api、实现和运行时配置中声明的依赖项。此配置是用于解决依赖关系的配置示例,因此,用户不应该在runtimeClasspath配置中直接声明依赖项。



6)apiElements

作为这个项目的外部可消耗API的一部分,以及在这个项目中定义的类,这些类应该被其他项目所消耗。这个配置是一个展示用于消费的工件的示例。各种插件添加了进一步的标准配置。您还可以定义自己的自定义配置,以在您的构建中使用。




Gradle教程第一章:1.5依赖关系
1.5.3 apiElements

作为这个项目的外部可消耗API的一部分,以及在这个项目中定义的类,这些类应该被其他项目所消耗。这个配置是一个展示用于消费的工件的示例。各种插件添加了进一步的标准配置。您还可以定义自己的自定义配置,以在您的构建中使用。




Gradle教程第一章:1.5依赖关系
1.5.4外部依赖关系

您可以声明各种类型的依赖项。其中一个类型是外部依赖项。这是对在当前构建之外构建的某些文件的依赖,并存储在某种存储库中,如Maven中心、企业Maven或Ivy存储库,或本地文件系统中的目录。

要定义一个外部依赖项,请将其添加到依赖项配置:

例1.5.4.1。外部依赖项的定义

build.gradle

dependencies {

    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'

}


使用组、名称和版本属性标识外部依赖项。根据您使用的存储库类型,组和版本可能是可选的。

声明外部依赖关系的快捷方式类似于“group:name:version”。

1.5.4.2外部依赖的快捷定义

build.gradle

dependencies {

    compile 'org.hibernate:hibernate-core:3.6.7.Final'

}





Gradle教程第一章:1.5依赖关系
1.5.5 储存库

Gradle如何为外部依赖项找到文件?Gradle在存储库中寻找它们。存储库实际上只是由组、名称和版本组成的文件集合。Gradle理解多种不同的存储库格式,如Maven和Ivy,以及访问存储库的几种不同方式,比如使用本地文件系统或HTTP。

例1.5.5.1使用Maven中央存储库

build.gradle

repositories {

    mavenCentral()

}

或Bintray JCenter:

例1.5.5.2使用JCenter库

build.gradle

repositories {

    jcenter()

}

或任何其他远程Maven存储库:

例1.5.5.3使用远程Maven存储库

build.gradle

repositories {

    maven {

        url "http://repo.mycompany.com/maven2"

    }

}

或远程常春藤存储库:

例1.5.5.4使用远程Ivy目录

build.gradle

repositories {

    ivy {

        url "http://repo.mycompany.com/repo"

    }

}


也可以存储库在本地文件系统中。这既适用于Maven和Ivy存储库。

例1.5.5.5使用本地Ivy目录

build.gradle

repositories {

    ivy {

        // URL can refer to a local directory

        url "../local-repo"

    }

}

项目可以有多个存储库。Gradle将按照指定的顺序在每个存储库中寻找依赖项,在包含所请求模块的第一个存储库中停止。



1.5.6出版工作

依赖配置也用于发布文件。我们将这些文件称为发布工件,或者通常只是工件。

插件在定义项目的工件方面做得很好,因此您通常不需要做任何特殊的事情来告诉Gradle需要发布什么。然而,您需要告诉Gradle在哪里发布工件。您可以通过将存储库附加到uploadArchives任务来实现。这里有一个发布到远程Ivy存储库的示例:

例1.5.6.1发布到Ivy存储库

build.gradle

uploadArchives {

    repositories {

        ivy {

            credentials {

                username "username"

                password "pw"

            }

            url "http://repo.mycompany.com"

        }

    }

}

现在,当您运行gradle uploadArchives时,gradle将构建并上传您的Jar。Gradle还将生成并上传一个ivy.xml。

您还可以发布到Maven存储库。语法略有不同。请注意,您还需要应用Maven插件以便发布到Maven存储库。当这个位置就位时,Gradle将生成并上传一个pom.xml。

例1.5.6.2发布到Maven存储库

build.gradle

apply plugin: 'maven'


uploadArchives {

    repositories {

        mavenDeployer {

            repository(url: "file://localhost/tmp/myRepo/")

        }

    }

}











以上是关于Gradle教程第一章:1.5依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

Gradle教程第一章:1.6多项目建立

译Gradle 的依赖关系处理不当,可能导致你编译异常

spring in action第一章小结1

Gradle 查看包的依赖关系

Gradle教程第一章:1.1Gradle命令行使用

如何告诉 Grails 使用 Gradle 解决依赖关系