(8)依赖管理

依赖分组

Gradle将对依赖进行分组,比如编译Java时使用的是这组依赖,运行Java时又可以使用另一组依赖。每一组依赖称为一个Configuration,在声明依赖时,我们实际上是在设置不同的Configuration。要定义一个Configuration,我们可以通过以下方式完成:

configurations {
   myDependency
}

以上只是定义了一个名为myDependency的Configuration,我们并未向其中加入依赖。我们可以通过dependencies()方法向myDependency中加入实际的依赖项:

dependencies {
   myDependency 'org.apache.commons:commons-lang3:3.0'
}

以上,我们将Apache的commons加入了myDependency中。之后,如果有Task需要将Apache commons加入到classpath中,我们可以通过以下方式进行获取:

task showMyDependency << {
   println configurations.myDependency.asPath
}

依赖配置阶段

我们来看一个Java项目,该项目依赖于SLF4J,而在测试时依赖于Junit。在声明依赖时,我们可以通过以下方式进行设置:

dependencies {
   compile 'org.slf4j:slf4j-log4j12:1.7.2'
   testCompile 'junit:junit:4.8.2'
}

我们并没有定义名为compile和testCompile的Configuration,这是这么回事呢?原因在于,java Plugin会自动定义compile和testCompile,分别用于编译Java源文件和编译Java测试源文件。另外,java Plugin还定义了runtime和testRuntime这两个Configuration,分别用于在程序运行和测试运行时加入所配置的依赖。也就是:

  • 源代码的两个阶段:compile(编译)、runtime(运行时)
  • 测试代码的两个阶段:testCompile、testRuntime

它们的依赖关系如下:

(8)依赖管理_第1张图片
  • 在编译阶段依赖的那么在运行时也会依赖。
  • 如果运行时依赖的编译时不一定会依赖。
  • 如果源代码依赖的那么测试代码也会依赖。
  • 测试代码依赖的源代码不一定会依赖。

你可能感兴趣的:((8)依赖管理)