Gradle学习(五)——依赖管理基础
什么是依赖管理
粗略的说,依赖管理就干两件事:1.Gradle需要知道项目跑起来需要哪些玩意,并且按顺序找到它们,并把他们导入到工程中。2.Gradle还需要把项目的输出上传到其他地方。我们把这些需要上传的文件叫做产出。
大多数项目都不是完全独立的,在运行和测试过程中都需要额外的第三方包,这些第三方的包就构成了依赖关系.Gradle允许你声明你需要哪些依赖,然后Gradle就会找这些依赖,并把它们加到你的编译环境,运行环境或者测试环境中。这些依赖可能在Ivy或者Maven的远程仓库,或者是本地目录中,或者是多个项目中直接的相互依赖,我们把这个过程叫做依赖解析。
这些导入的依赖往往还有它自己的依赖,Gradle也会帮你把依赖的依赖导入进来,这就是传递依赖。
这个插件是Gradle对ant一个更优的扩展,ant仅仅可以指定绝对或者相对路径的jar。Gradle仅仅需要你声明依赖的名词版本号等,它就会自己帮你去找,当然你也可以在ant中增加Ivy或者Maven插件,但是明显Gradle使用起来更加方便。
大部分项目的目的都是产生一些文件,然后这些文件可以在项目外部使用,比如你的项目是一个java的lib库工程,那么你的工程最终会生成项目的jar文件,源代码的jar文件,还有一些doc,然后需要把他们发布的其他地方。这些输出的文件构成了项目的产出,Gradle会负责这个重要的过程。你需要声明你的产出,gradle会构建并发布它们。产出具体到底是什么取决你自己,你可以copy这些文件到本地的一个目录,也可能把它们上传到Ivy或者Maven库,还有就是把他们作为同个root项目下的其他子项目的依赖,这个过程我们可以叫做发布
声明依赖
我们来看下依赖是如何声明的,以下是个例子:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.jsoup', name: 'jsoup', version: '1.11.2'
testCompile group: 'junit',name:'junit',version: '4.+'
}
我们来看发生了什么,首先在运行时环境和测试环境中都需要jsoup-1.11.2,然后在测试环境需要junit,而且要4.0版本及以上,而且声明了要到maven中心库去找。
依赖配置
配置其实都是在声明依赖和产出,这些配置主要有三个目的:
- 声明依赖 这个插件可以在定义的任务的执行期间,用户非常容易的使用为了各种目的定义的子项目或者第三方插件去构建项目。
- 依赖解析 这个插件可以去找到任务中定义的各种输出,通常是去下载
- 为使用者暴露产出 这个插件可以为使用者暴露那些产出可以生成并使用
各种各样的插件都有自己的一套扩展的依赖配置,比如java插件,groovy插件
外部依赖
你可以定义各种各样的依赖,其中的一种叫做外部依赖,这种依赖是在当前构建之外的,可能是个远程库,比如Ivy或者Maven的中心库,或者公司的Ivy或者Maven库,也可能是本地的一个文件夹 还是刚才的例子:
dependencies {
compile group: 'org.jsoup', name: 'jsoup', version: '1.11.2'
}
一个外部依赖由group
,name
,version
属性,在某些依赖仓库下,group
,version
是可选的,你还可以用group:name:version
的方式使用缩写:
dependencies {
compile 'org.jsoup:jsoup:1.11.2'
}
仓库
Gradle需要在仓库里找依赖,仓库就是一个由group
,name
,version
组织的文件的集合,gradle支持多种格式的仓库,比如Ivy和Maven,也可以通过不同的方式访问仓库,比如通过Http或者本地文件系统。
默认Gradle是不带任何仓库配置的,你需要手动定义最少一个可以找到你的外部依赖的仓库,例子中是maven仓库:
repositories {
mavenCentral()
}
还有jcenter也可以
repositories {
jcenter()
}
现在有了docker神器,自己用nexus搭个maven库也是很方便的。
一行命令安装启动docker run -d -p 8081:8081 --name nexus sonatype/nexus3
gradle配置自己的maven仓库
repositories {
maven {
url 'http://127.0.0.1:8081/repository/sweetop-public/'
}
}
一个项目可以指定多个仓库,Gradle会按照顺序查找,找到就会停止查找。
发布产出
依赖配置也可以用来发布项目的产出,使用插件就可以完成发布了,但是还是要你告诉Gradle发布的url和账号密码。
uploadArchives {
repositories {
mavenDeployer {
repository(url:'http://127.0.0.1:8081/repository/sweetop/') {
authentication(userName:'admin',password:'admin123')
}
}
}
}
当你运行gradle uploadArchives
时,Gradle会帮你打包jar,并且生成pom.xml文件,最后上传到指定的url