Gradle学习(三) 依赖管理基础
什么是依赖管理?
初略的说,依赖管理由两部分组成。
首先,Gradle需要知道并且寻找到一些你的的项目在构建或运行的时候所需要的文件 ,Gradle管这些需要进入(incoming)到你项目中的文件叫做依赖(dependencies).
其次,Gradle需要构建并且上传你的项目的一些生成物,Gradle管这些需要发出的(outgoing)的文件叫做出版(publictions).
Dependency :
几乎所有工程都不可能完全的不依赖外部文件,一般都需要一些其他工程构建的文件来帮助完成一些必须的功能,这些外部文件构成了工程的依赖。你可以告诉Gradle你需要什么依赖文件,Gradle则可以帮你找到
这些依赖文件并且很好的组织管理它们,这些依赖文件可以在Ivy或者Maven的远程仓库中下载,也可以在你的本地目录下被加载,或者你可以多工程项目(muti-project)中进行工程间的相互依赖。Gradla把这样一个
处理依赖的过程叫做依赖解析(Dependency Resolution)。
常常会有一些依赖的文件它们同时还会依赖其他文件的情况,比如说Hibernate core需要一些其他的一些库(libraries)来支持他的允许。在这种情况下Gradle会去寻找这些依赖来保证程序可以正常运行,这种情况
被称为传递依赖(transitive dependencies)
Publiction:
有些工程构建的主要目的是作为一个服务其他工程使用,在这种情况你需要为你的工程打Jar包,获取还需要打源码包和生成文档并且将这些文档发布到一些地方上去,这些输出文件就构成了一个工程的出版物,
Gradle可以很好的帮你的工程完成这项任务,你首先声明你的工程需要发布出版的文件,Gradle会帮你构建这项出版文件并且根据你的需要发布到你需要发布到的地方,你可以需要拷贝一个文件到本地仓库,或者上传
文件到Ivy或者Maven的中央仓库等等,我们把这个出来过程叫做出版(publication)。
声明一个依赖:
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 core 3.6.7是项目在编译期所需要的资源,同时也暗示了 hibernate core在运行期(runtime)也是必需的,
testCompile group:'junit',name: 'junit',version:'4.+'
说明了在测试编译期需要任意一个junit版本在4以上的依赖。
依赖配置(Dependency configuration)
依赖控制范围:
compile(编译期):
compile级别的依赖是在整个工程在编译时期所必须的
runtime(运行期)
runtime级别是在工程代码运行的时候所必须的,默认包含在编译期依赖
testCompile(测试编译期)
testCompile级别是在工程代码在测试编译期所必须的,默认包含在运行期以及编译期
testCompile(测试运行期)
testCompile是在工程测试代码运行时期所必须的,默认包含在运行期以及编译期以及测试编译期
外部依赖(External Dependency)
外部依赖就是需要一些非本工程的依赖文件,比如在Maven仓库或者本地文件系统中的依赖。
声明一个外部依赖的方式如下
dependencies { compile group: 'org.hibernate',name:'hibernate-core',version:'3.6.7.Final' }
一个外部依赖用group,name,version三个属性来标识,maven同样是采用三个属性来唯一确认一个依赖(groupId, artifactId,version)
在Gradle中根据你依赖的仓库不同,group与version属性可选。(在maven中groupId, artifactId,version三个属性都是必填的)
定义仓库
repositories { mavenCentral() }
或直接指定Url
repositories { maven { url "http://repo.mycompany.com/maven2" } }
或使用Ivy(一个敏捷的依赖管理工具 http://ant.apache.org/ivy/)
repositories { ivy { url "http://repo.mycompany.com/repo" } }
本地Ivy
repositories { ivy { // URL can refer to a local directory url "../local-repo" } }
一个工程可以有多个仓库,Gradle会根据配置的仓库一个一个的寻找相关的依赖直到找到位置。
发布组件
依赖管理同样可以用来处理发布文件
插件可以帮我们很好的定义项目的组件,通常你不需要去告诉Gradle什么东西需要被发布,你只要告诉Gradle要发布到什么地方即可。
uploadArchives { repositories { ivy { credentials { username "username" password "pw" } url "http://repo.mycompany.com" } } }
运行gradle uploadArchives ,Gradle就会帮你上传Jar文件到指定的地方去,同时gradle还会帮你生生成好相应的ivy.xml文件
你同样可以吧对应的jar发布到maven仓库中,不过你需要使用maven的插件来完成这项任务,同样的gradle会帮你生成好相应的pom.xml文件
apply plugin: 'maven' uploadArchives { repositories { mavenDeployer { repository(url: ) "file://localhost/tmp/myRepo/" } } }