依赖管理中gradle首先要做的是找到哪些东西需要去构建或者执行,在这一部分我们将输入的文件称为依赖关系(dependencies)。
依赖管理中gradle要做的第二件事就是构建然后上传项目的产出,在这一部分我们称这些输出的文件为项目的产出(publication)
输入的文件构成了项目的依赖,gradle允许你告诉它你项目所依赖的东西。然后gradle会找到这些所依赖的文件,然后在构建时起作用。有时候这些依赖文件需要从远程仓库下载。有时也可以指定本地的依赖文件。而在多项目构建中,可能还会依赖其他项目。
项目来说,这种方式要比ant的构建方式有很大的便捷。在ant构建中,你必须要有一个完整的路径去告诉ant你需要去哪里下载项目所依赖的东西。而在gradle中你只需要简单的高速gradle你需要依赖的jar包名称,它自己就能找到。当然有人会说我可以通过添加Apache Ivy来达到相同的目的,但是gradle还是好用点。
有时候你所依赖的项目本身也依赖其他项目,这很正常,不可能每一个项目都是纯洁项目。对于这个问题,gradle又是怎么解决的的呢?这个时候就用到了传递依赖的特性。在gradle构建的过程中,它会发现这些隐藏的依赖,从而自动获取这些依赖,然后将他们倒入到项目中,使之有效。
maven仓库
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(); }
以后会学习自定义的配置。
compile group:'org.hibernate',name:'hibernate-core',version:'4.3.7.Final'
也可以定义为如下形式:
compile 'org.hibernate:hibernate-core:4.3.7.Final'
定义依赖都是在仓库中去寻找,以group:name:version三个关键字在仓库中匹配某一个jar包。gradle内部知道针对不同的仓库的不同的获取方式以及采取不同的仓库格式。有本地文件系统和http等方式。默认情况下gradle是不知道选择哪个仓库,所以需要用户显示的指定,例如我们指定maven仓库:
repositories{ mavenCentral(); }
//定义仓库 repositories{ //mavenCentral(); //maven远程仓库 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" }
一个项目可以定义多个依赖的仓库,gradle会根据特定的顺序去各个仓库中查找所需要的jar包。知道找到所需要的jar包,就结束。
你无需告诉gradle去发布产品,你只需要告之发布的产品放在什么地方就可以了。例如你想发布到Ivy服务器上
uploadArchives { //定义仓库 repositories { ivy { // 证书 credentials { username "username" password "pw" } url "http://repo.mycompany.com" } } }
gradle uploadArchives
uploadArchives { //定义仓库 repositories { mavenDeployer{ repository(url:"file://localhost/tmp/myRepo/") } } }