Gradle Task
build.gradle通常称之为构建脚本;构建脚本中定义了一个项目和包含的任务
————————————————————————————————————————
1、不使用build.gradle默认文件名
一般情况下执行任务,使用gradletask名,默认执行build.gradle文件中的任务
如果task要引用另外的构建脚本,可以使用-b参数显式声明。
$ gradle -b myProject.gradle sayHello
————————————————————————————————————————
2、指定默认执行的task
defaultTasks'sayHello'
————————————————————————————————————————
3、屏蔽log信息
$ gradle-q (quiet安静的)
————————————————————————————————————————
4、列出project的所有task
$ gradletasks
列出project的所有属性
$ gradleproperties
可以看到projectDir和buildFile
定义一个task,对属性值进行输出,若在字符串中引用property,需要‘$属性值’
taskprintProperties {
printlnprojectDir
printlnbuildFile
}
$ gradle printProperties
————————————————————————————————————————
5、任务的同名覆盖
taskprintProperties {
printlnname
printlnproject.name
println"the build script file is: '$buildFile.name'"
}
$ gradle printProperties
————————————————————————————————————————
6、可以使用命令行一次执行多个任务,gradle会按命令中的顺序来依次执行每个任务,并且也会执行每个任务中的依赖,每个任务只会被执行一次;
taskintro1(dependsOn: sayHello)<< {
}
taskintro2(dependsOn: sayHello)<<{
}
$ gradleintro1 intro2
————————————————————————————————————————
7、可以使用-x参数来排除不需要执行的任务
$gradle intro1 -x sayHello
————————————————————————————————————————
8、任务的简写
在执行任务时,只要键入的字符足以唯一区分出一个任务即可省去其它字符.
$ gradlesa (sayHello)
JavaPlugin
1、在没有引入java插件时,统计task数目和properties数目
# gradle tasks | wc -l 29
#gradle properties | wc -l 70
并且验证properties中没有对java的支持,可以如下进行验证
# gradle properties | grep java
引入Java插件
applyplugin: 'java'
重新统计project的task和properties
# gradle tasks | wc -l 55
#gradle properties | wc -l 110
结论:当引入java插件时,将会引入新的tasks和properties
libsDirName= 'mylib'
archivesBaseName= 'gradle-sample'
————————————————————————————————————————
2、在默认java目录下,创建java文件,执行build,看各个子task之间的依赖关系
体会gradle增量构建的特性(up-to-date)。
$gradle build
$gradle assemble
$gradle test
总结:gradlebuild任务中子任务的相互依赖关系,增量式构建 up-to-date
build:编译,单元测试以及打包
assemble:编译并且打jar包,但不会执行单元测试
test:运行单元测试
check:编译并且测试代码,如果添加了Code-quality插件,该任务同时会对代码风格进行检查
gradleclean 删除完整的build文件夹
gradleclean<TaskName> 删除某个子任务产生的文件 例如, gradlecleanCompileJava
————————————————————————————————————————
3、默认java项目的文件结构
该插件将会依据如下目录结构来检索你的项目
src/main/java
src/main/resources
src/test/java
src/test/resources
是因为java插件中默认设置了这样的结构,当文件还未创建时,打印出默认值。
tasksourceSetJavaProperties << {
sourceSets {
main {
println"java.srcDirs = ${java.srcDirs}"
println"resources.srcDirs = ${resources.srcDirs}"
}
test {
println"java.srcDirs = ${java.srcDirs}"
println"resources.srcDirs = ${resources.srcDirs}"
}
}
}
可以根据默认值创建目录结构:
taskcreateJavaProject << {
sourceSets*.java.srcDirs*.each{ it.mkdirs() }
sourceSets*.resources.srcDirs*.each{ it.mkdirs()}
}
————————————————————————————————————————
4、sourceSet
不需要任何配置,java插件默认包含mainand test source sets
对每个文件集合增加了3个task,根据sourceSest的名称进行命名:compile<SourceSet>Java,process<SourceSet>Resources, and <SourceSet>Classes.
为该集合的文件执行该任务。
Forexample, compileJava applies to the main source test, butcompileTestJava applies to the test source set.
$ gradletasks --all
增加一个sourceset,只需要将sourceset的名称放在sourceSets中即可。
sourceSets{
api
}
$ gradletasks –all
增加了3个task,分别为
apiClasses
compileApiJava
processApiResources
建立apisourceset的目录结构:
taskcreateApiFolder << {
sourceSets.api.java.srcDirs.each{ it.mkdirs() }
sourceSets.api.resources.srcDirs.each{ it.mkdirs()}
}
$gradle createApiFolder
在api中增加代码,添加main中代码对api的依赖。
mkdir-p src/api/java/gradle/sample
visrc/api/java/gradle/sample/ReadWelcomeMessage.java
visrc/main/java/gradle/sample/Sample.java //implementsReadWelcomeMessage
$gradle classes
执行失败
解决方案:classpath中添加api的classpath,并且classes依赖于apiClasses
sourceSets{
api
main {
compileClasspath = compileClasspath +files(api.output.classesDir)
}
}
classes.dependsOnapiClasses
————————————————————————————————————————
5、gradle对jar包得依赖管理
repositories{
mavenCentral()
}
dependencies{
compile 'org.springframework:spring-webmvc:4.0.6.RELEASE'
testCompile'junit:junit:4.11'
}