Gradle dependencies

java插件的引入了一些依赖配置项,这些配置项在gradle的configuration阶段会被分配到特定的任务上面,比如compileJava或者test。 这些配置项有:

compile
runtime
testCompile
testRuntime
archives
default

compile表示 编译期间的依赖
runtime表示 运行期间的依赖

我们通过一张图,来了解这些依赖配置都是被那些java plugin的任务所使用。

我们通过这图发现,我们的compile配置项是指派给compileJava这个任务的,那么compile配置的的所有jar包是就会被compileJava这个任务使用的~(即 在编译源代码的时候会使用这些jar包。) 同样的testCompile这个配置也是一样的道理~

通过 Gradle无秘密之SourceSet 这篇博文中我们已经知道,当我们添加一个sourceSet的时候java plugin会自动添加三个任务, compileSourceSet 、processSourceSetResource、sourceSetClasses。同样的,也会为我们增加两个依赖配置项,分别是:srouceSetCompile和sourceSetRuntime,意思是说。在依赖配置中,soruceSetCompile配置的所有jar包会被compileSourceSet这个任务所使用。

再附上一张官方文档中的一张图,通过这张图,我们可以很清晰的知道各个任务的依赖关系,通过这张图,我们就可以知道为什么当我们执行 >gradle build 的时候,gradle会编译源文件,拷贝资源文件,以及对我们的工程打成一个jar包,并放置在build目录下面

上面所提到的所有依赖配置,都是基于Java Plugin的。当然其他的plugin中的dependencies management也是一样的道理。比如:对于war Plugin,它就添加了两个配置providedCompile和providedRuntime这两个依赖配置项。这两个其实和java plugin的compile和testCompile配置项是一样的意思,只不过war plugin的配置的jar包不会被打进war包中。

举个例子,比如对于 servlet 的api。servlet-api.jar这个包已经存在于tomcat的lib目录下了。那如果我们在dependencies里面用compile这个配置项类来配置 servlet-api.jar的话,这个就会被打包到war包中,发布到tomcat的时候就会发生两个servlet-api包的情况,所以,我们将servlet-api放到providedCompile这个配置项里面,表示我们只需要在编译阶段使用,同时不会打包进war包,即不会再web应用的WEB-INF/lib目录下面。

<<< 捐赠 >>>

转载请注明出处! 原文地址: http://webinglin.github.io

留言

2015-05-13