1. 什么是依赖管理
依赖管理可以分为两部分:一是依赖,即项目构建或运行时所需要的一些文件;二是发布,即构建完成后上传到某个地方。
1.1 依赖
大部分的项目都需要第三方库类或项目文件,这些文件就是项目的依赖了。比如JDBC的jar包,junit的jar包等等。Gradle需要你告诉它工程的依赖是什么,在哪里可以找到,然后它帮你加入构建。在依赖中,可能需要去远程仓库下载文件,如maven或Ivy,本地仓库,甚至是另一个项目,这个过程我们称之为依赖解决。
另外,我们所依赖的文件自身可能也有依赖,当Gradle进行构建的时候,它也会去找这些依赖,这个过程我们称之为依赖传递。
1.2 发布
大部分的项目构建的主要目的是生成一些项目之外使用的文件。比如生成jar包,包括文档、源码,然后打包发布出去。这些文件构成了项目的输出内容,并由你决定要对它自己做。比如复制到某个目录,上传到maven或Ivy仓库,在其他项目中使用。这些都可以称之为发布。
2. 依赖声明
以下是一个依赖声明的例子:
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.+' }
这里repositories里的内容声明了maven*仓库,这是Gradle去找依赖的地方。接着是定义了两个依赖。一个是地需要的hibernate-core.3.6.7Final.jar。另一个是测试时需要的junit,版本是4.0以上。
这里先简单解释,后面的笔记会有更详细的描述。
3. 依赖配置
Gradle 中以组织的形式来划分配置。每一个配置都只是指定的一组依赖,我们称之为依赖配置。我们可以用它们的声明外部依赖和项目的发布。
Java插件定义了许多标准的配置,这些配置也表示了java插件所使用的类路径(classpath)。如以下:
- compile:编译项目代码所需要的依赖。
- runtime:运行时所需要的依赖。默认情况下,包含了编译时期的依赖。
- testCompile:编译测试代码时所需要的依赖。默认情况下,包含了编译时产生的类文件,以及编译时期所需要的依赖。
- testRuntime:测试运行时期的依赖。默认情况下,包含了上面三个时期的依赖。
不同插件提供的标准配置不同,我们也可以自己定义。这点可以看文档的第50章《依赖管理》。
4. 外部依赖
依赖的类型有很多种,其中一种叫外部依赖。它指的是依赖于一些如在外部构建,存放于类似maven的仓库,或保存在本地文件系统的某个目录中的文件。
定义外部依赖包含group, name和version这三个属性。根据选取的仓库不同,group和version可能不需要。
dependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' }
除了这种写法之外,还有一种更简洁的写法,就是把这三个属性的值拼接起来,写成这样:"group:name:version"。如下所示:
dependencies { compile 'org.hibernate:hibernate-core:3.6.7.Final' }
5. 仓库
Gradle 是在一个仓库里查找外部依赖的。仓库会按照group,name和version的规则来存放文件。Gradle支持不同的仓库格式,如maven,Ivy等。并且提供了多种访问仓库的方式,比如使用本地文件系统或HTTP。
下面是使用maven*仓库的例子:
repositories { mavenCentral() }
还有使用maven远程仓库的例子:
repositories { maven { url "http://repo.mycompany.com/maven2" } }
使用远程Ivy仓库:
repositories { ivy { url "http://repo.mycompany.com/repo" } }
使用本地Ivy仓库:
repositories { ivy { // URL can refer to a local directory url "../local-repo" } }
一个项目中可以使用多个仓库,Gradle会按顺序依次寻找,找到后会停止寻找。
6. 打包发布
依赖配置也用于发布文件,我们称之为打包发布或发布。
插件对打包提供了完美的支持,所以我们只需要告诉Gradle要发布到哪里。这就需要在uploadArchives任务中添加一个仓库。
下面是发布到Ivy仓库的例子:
uploadArchives { repositories { ivy { credentials { username "username" password "pw" } url "http://repo.mycompany.com" } } }
执行 gradle uploadArchives,Gradle会构建并上传你的jar包,同时也会生成一个ivy.xml文件且一并上传。
发布到maven仓库需要maven插件,Gradle也会生成pom.xml并且一起上传到目标仓库。下面是发布到maven仓库的例子:
pply plugin: 'maven' uploadArchives { repositories { mavenDeployer { repository(url: "file://localhost/tmp/myRepo/") } } }
本章笔记到此结束。
另外说明一下,由于Gradle 和 Android Studio更新较快,我的一些项目也逐渐升级到2.1版本。所以1.2的笔记应该不会全部写完。有什么不明白的,大家可以看一下文档。
另外,个人的Gradle翻译正在进行中,如果你对此有兴趣,请关注项目:https://github.com/msdx/gradledoc。
本文为Gradle阅读笔记,例子的代码来源于Gradle文档。