依赖分组
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
它们的依赖关系如下:
- 在编译阶段依赖的那么在运行时也会依赖。
- 如果运行时依赖的编译时不一定会依赖。
- 如果源代码依赖的那么测试代码也会依赖。
- 测试代码依赖的源代码不一定会依赖。
网友评论