上一篇:关于依赖管理
依赖的坐标
仓库中构件(jar包)的坐标是由configurationName "group:name:version:classifier@extension"
组成的字符串构成,如同Maven中的GAV
坐标,Gradle可借由此来定位你想搜寻的jar
包。
在gradle中可以通过以下方式来声明依赖:
testCompile group: 'junit', name: 'junit', version: '4.0'
项目 | 描述 |
---|---|
configurationName | 依赖的作用范围,具体介绍看本章第二小节 |
group | 通常用来描述组织、公司、团队或者其它有象征代表意义的名字,比如阿里就是com.alibaba ,一个group下一般会有多个artifact |
name | 依赖的名称,或者更直接来讲叫包名、模块、构件名、发布物名以及随便你怎么称呼。druid 就是com.alibaba 下的一个连接池库的名称 |
version | 见名知意,无它,版本号。 |
classifier | 类库版本,在前三项相同的情况下,如果目标依赖还存在对应不同JDK版本的版本,可以通过此属性指明 |
extension | 依赖的归档类型,如aar 、jar 等,默认不指定的话是jar |
这是由于Gradle依赖配置支持多种书写方式,采用map或者字符串。
// 采用map描述依赖
testCompile group: 'junit', name: 'junit', version: '4.0'
// 采用字符串方式描述依赖
testCompile 'junit:junit:4.0'
显然采用字符串的方式更加简单直观,当然借助groovy
语言强大的GString
还可以对版本号进行抽离。如下面的示例,这里需要注意的是如果要用GString
的话,依赖描述的字符串要用""
双引号包起来才会生效。
def ver = "4.0"
testCompile "junit:junit:${ver}"
依赖的范围
上面的例子中采用的testComplie
是声明依赖的作用范围,关于各种作用范围的功效可见下表。
tip:这里需要注意的是,provided范围内的传递依赖也不会被打包
名称 | 说明 |
---|---|
compileOnly | gradle2.12之后版本新添加的,2.12版本时期曾短暂的叫provided,后续版本已经改成了compileOnly,由java插件提供,适用于编译期需要而不需要打包的情况 |
providedCompile | war插件提供的范围类型:与compile作用类似,但不会被添加到最终的war包中这是由于编译、测试阶段代码需要依赖此类jar包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war包中了;例如Servlet API就是一个很明显的例子. |
api | 3.4以后由java-library提供 当其他模块依赖于此模块时,此模块使用api声明的依赖包是可以被其他模块使用 |
implementation | 3.4以后由java-library提供 当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用,不允许其他模块使用。 |
compile | 编译范围依赖在所有的classpath中可用,同时它们也会被打包。 |
providedRuntime | 同proiveCompile类似。 |
runtime | runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。 |
testCompile | 测试期编译需要的附加依赖 |
testRuntime | 测试运行期需要 |
archives | – |
default | 配置默认依赖范围 |
下一篇:依赖的分类