Gradle速记笔记
2020-04-21 本文已影响0人
JuliusL
maven仓库:https://mvnrepository.com/
gradle文档:https://docs.gradle.org/
task的依赖
执行task的时候,会先执行depensOn的任务
task().dependsOn()
task的生命周期
task("opendoor",{
println("开冰箱门")//声明逻辑,扫描的时候执行
})
task("putelephant",{
var aa = "" //扫描时执行
doFirst{//当某个任务开始做的时候去执行
println("放入大象")
}
doLast{
//运行时执行
}
}).dependsOn("opendoor")
task("closedoor",{
}).dependsOn("putelephant")
1,扫描
把task闭包里声明的逻辑全部走一遍
2,运行
把task闭包里doFirst和doLast走一遍
gradle的增量更新
- inputs.dir() //输入目录
- inputs.file()//输入文件
- outputs.dir()//输出目录
- outputs.file()//输出文件
gradle执行构建任务的时候,会检测如果上述配置(input.dir()...)里的文件夹没有变化,
//build.gradle.kts
//把所有源代码文件名记录下来
task("getsrcname",{
inputs.dir("src")
outputs.file("info.txt")
doFirst{
var srcdir = fileTree("src")
var infotxt = file("info.txt")
infotxt.writeText("")
srcdir.forEach{
if(it.isFile){
infotxt.appendText(it.absolutePath)
infotxt.appendText("\r\n")
}
}
}
})
gradle插件合集
1,application插件:编译出一个java/kotlin的应用程序
2,java插件
3,war插件
gradle依赖管理
依赖管理:指在什么地方以什么形式引入外部代码。
比eclipse好在不用手动导关联包。
gradle会自定把包中依赖的包下载下来。
gradle依赖管理有个重要的概念是:OOP思想,以下部分就是坐标
compile group:'commons-httpclient',name:'commons-httpclient',version:'3.1'
group:一般用包名表示,表示项目由哪个组织开发的
name:一般是项目的名称
version:该元素定义jar包的版本
有了这些内容,相当于把原先杂乱无比的jar包分门别类,定好归属,方便管理。
TDD测试驱动开发
gradle依赖冲突
1,首先gradle会自动把冲突库中版本号较小的关联库该为大的那个关联库。
2,如果1未能解决冲突,需要手动解决的话。就在闭包中加入exclude移除冲突的包。
compile(/*group:*/'commons-httpclient',/*name:*/'commons-httpclient',/*version:*/'3.1'){
exclude("group","module")
}
gradle自定义扩展
指针对gradle定义好的任务,去扩展。
自定义删除的任务👇
task("mydelete",Delete::class,{
setDelete("src/main/java/Hello.java")
})
除了删除还有copy和打成jar包,这些在gradle官网文档里都有。
gradle外部扩展
用gradle执行class文件:
task("runjava",{
javaexec{
main="Test" //.class文件名
classpath(".") // 点代表当前gradle文件的根目录
}
})