[Gradle中文教程系列]-跟我学Gradle-5.1:依赖-坐标与范围

上一篇:关于依赖管理

依赖的坐标

仓库中构件(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 依赖的归档类型,如aarjar等,默认不指定的话是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 配置默认依赖范围

下一篇:依赖的分类

你可能感兴趣的:([Gradle中文教程系列]-跟我学Gradle-5.1:依赖-坐标与范围)