🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 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然后上传到指定的路径。