## 1.依赖管理基础之dependencies
依赖管理中gradle首先要做的是找到哪些东西需要去构建或者执行,在这一部分我们将输入的文件称为依赖关系(dependencies)。
## 2.依赖管理基础之publication
依赖管理中gradle要做的第二件事就是构建然后上传项目的产出,在这一部分我们称这些输出的文件为项目的产出(publication)
## 3.依赖解析-dependency resolution
输入的文件构成了项目的依赖,gradle允许你告诉它你项目所依赖的东西。然后gradle会找到这些所依赖的文件,然后在构建时起作用。有时候这些依赖文件需要从远程仓库下载。有时也可以指定本地的依赖文件。而在多项目构建中,可能还会依赖其他项目。
项目来说,这种方式要比ant的构建方式有很大的便捷。在ant构建中,你必须要有一个完整的路径去告诉ant你需要去哪里下载项目所依赖的东西。而在gradle中你只需要简单的高速gradle你需要依赖的jar包名称,它自己就能找到。当然有人会说我可以通过添加Apache Ivy来达到相同的目的,但是gradle还是好用点。
## 4.传递依赖-transitive dependencies.
有时候你所依赖的项目本身也依赖其他项目,这很正常,不可能每一个项目都是纯洁项目。对于这个问题,gradle又是怎么解决的的呢?这个时候就用到了传递依赖的特性。在gradle构建的过程中,它会发现这些隐藏的依赖,从而自动获取这些依赖,然后将他们倒入到项目中,使之有效。
## 5.定义依赖
~~~
apply plugin: 'java'
//依赖的jar包
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile group:'org.hibernate',name:'hibernate-core',version:'4.3.7.Final'
testCompile group:'junit',name:'junit',version:'4.12'
}
//定义仓库
repositories{
mavenCentral();
}
~~~
在maven仓库中找到最新的版本填入上面的version中,gradle在构建的时候自动下载这些jar包。
我们在android studio上执行后会发现jar包都下到项目目录下。从图中可以看出,我们不仅下载了定义的jar包,这些依赖的jar所依赖的jar包也一并下载下来。
![](https://box.kancloud.cn/2016-01-07_568e4665d43a6.jpg)
##6.依赖配置
#### compile:该依赖是为了编译项目的源码
#### runtime:该依赖为了项目运行时的classes,默认情况下也是为了编译
#### testCompile:该依赖是为了编译项目测试的源码,默认情况下包括compile和runtime
#### testRuntime:该依赖是为了执行测试的case。默认情况下包括compile、runtime和testCompile
以后会学习自定义的配置。
## 7.外部依赖
~~~
compile group:'org.hibernate',name:'hibernate-core',version:'4.3.7.Final'
~~~
其中name和version是可选的。
也可以定义为如下形式:
~~~
compile 'org.hibernate:hibernate-core:4.3.7.Final'
~~~
## 8.gradle如何使用仓库
定义依赖都是在仓库中去寻找,以group:name:version三个关键字在仓库中匹配某一个jar包。gradle内部知道针对不同的仓库的不同的获取方式以及采取不同的仓库格式。有本地文件系统和http等方式。默认情况下gradle是不知道选择哪个仓库,所以需要用户显示的指定,例如我们指定maven仓库:
~~~
repositories{
mavenCentral();
}
~~~
~~~
//定义仓库
repositories{
//mavenCentral();
//maven远程仓库
{
url "http://repo.mycompany.com/maven2"
}
}
~~~
~~~
repositories{
//mavenCentral();
//maven远程仓库
//maven{
//url "http://repo.mycompany.com/maven2"
//}
//ivy远程仓库
ivy{
url "http://repo.mycompany.com/repo"
}
}
~~~
~~~
//mavenCentral();
//maven远程仓库
// maven{
// url "http://repo.mycompany.com/maven2"
// }
ivy {
url "../local-repo"
}
~~~
(以上四种方式经过验证都可以获取jar包)
一个项目可以定义多个依赖的仓库,gradle会根据特定的顺序去各个仓库中查找所需要的jar包。知道找到所需要的jar包,就结束。
## 9.发布产品
你无需告诉gradle去发布产品,你只需要告之发布的产品放在什么地方就可以了。例如你想发布到Ivy服务器上
~~~
uploadArchives {
//定义仓库
repositories {
ivy {
// 证书
credentials {
username "username"
password "pw"
}
url "http://repo.mycompany.com"
}
}
}
~~~
你需要定义一个uploadArchives的task。这样你就可以执行下面的命令来上传jar到远程仓库。还会生成一个ivy.xml 然后上传到远程仓库
~~~
gradle uploadArchives
~~~
同样你也可以上传到maven仓库中
~~~
uploadArchives {
//定义仓库
repositories {
mavenDeployer{
repository(url:"file://localhost/tmp/myRepo/")
}
}
}
~~~
执行该任务后,会生成一个pom.xml然后上传到指定的路径。
- 前言
- gradle学习(1)-helloworld
- gradle学习(2)-基础语法
- gradle学习(3)-基础认识
- gradle学习(4)-构建java项目
- gradle学习(5)-创建eclipse项目
- gradle学习(6)-依赖管理
- gradle学习(7)-groovy
- gradle学习(8)-gradle的命令行
- gradle学习(9)-获取build相关信息
- gradle学习(10)-gui
- gradle学习(11)-编写构建脚本
- gradle学习(12)-groovy一些基础语法
- gradle学习(13)-有的没的
- gradle学习(14)-任务
- gradle学习(15)-任务
- gradle学习(16)-操作文件
- gradle学习(17)-被合并的ant
- gradle学习(18)-ant的属性
- gradle学习(19)-log系统
- gradle学习(20)-详解java插件
- gradle学习(21)-在eclipse中构建java项目
- gradle复习(1)-2种定义任务方式的区别
- gradle复习(2)-eclipse中添加依赖jar包
- gradle复习(3)-在gradle项目中使用TestNG
- gradle复习(4)-Cannot find System Java Compiler
- gradle复习(5)-Test remote debug
- gradle复习(6)-深入Jacoco
- gradle复习(7)-深入Jacoco
- gradle复习(8)-Task中行为
- gradle学习(22)-Sonar
- gradle学习(23)-Sonar runner