【一】Gradle 初识
1.Gradle和Maven的对比
- gradle 使用groovy语言,可以进行逻辑判断,maven基于xml,无法进行逻辑判断。
- gradle 可以在一个项目中,根据需求,生成2个不同的jar, maven则不能从一个项目中,生成两个不同的jar或者war。需要修改多份xml。
- gralde 缓存会校验本地和远程是否发生变化,没变化就不会下载。maven不会。这里看gradle的目录结构,jar包的父层就是校验码。
- maven对于快照jar包,如果本地缓存了。那么远端仓库更新了,本地也不一定更新,而gradle 对于是否更新,可以做自定义的配置。
2.build.gradle
1 #使用 java 2 apply plugin: 'java' 3 #设置版本号 4 version = 0.3 5 #设置编译级别 6 sourceCompatibility = 1.6 7 8 #编译成jar 9 jar { 10 manifest { 11 #设置启动类 12 attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp' 13 } 14 } 15 #设置源码位置 16 sourceSets { 17 main { 18 java { 19 #设置源码目录 20 srcDirs = ['src'] 21 } 22 } 23 } 24 25 #输出的classes目录,默认是build 26 buildDir = 'out' 27 28 #设置仓库 29 repositories { 30 mavenCentral() 31 } 32 #设置依赖 33 dependencies { 34 #依赖 groupId artifactId version 35 #测试时需要 36 testCompile group: 'junit', name: 'junit', version: '4.12' 37 #编译时需要 运行时不需要 38 providedCompile group: 'javax.servlet', name: 'jsp-api', version: '2.0' 39 #编译时 运行时都需要 40 compile group: 'org.springframework', name: 'spring-core', version: '5.1.5.RELEASE' 41 #编译时需要 运行时不需要 42 providedCompile 'javax.servlet:servlet-api:2.5', 43 'javax.servlet.jsp:jsp-api:2.1' 44 #运行时需要,编译时不需要 45 runtime 'javax.servlet:jstl:1.1.2', 46 'taglibs:standard:1.1.2' 47 } 48 #指定wep app 目录在哪里 49 webAppDirName = 'webfiles' 50 #指定静态资源的目录 从哪里引入 这里的配置有 要和webAppDirName相关联 51 war { 52 from 'static' 53 } 54 #构建 gradlew 任务 55 task wrapper(type: Wrapper) { 56 gradleVersion = '4.8' 57 distributionType = 'all' # bin和all 58 distributionBase //包装器下载的相对地址 59 distributionUrl //包装器下载的地址 60 }
3.gradle生成的目录介绍
- gradle下的build ,类似maven中的targer
- 生成后的war,在gradle中的lib下
- distributions 默认发包的目录
4.groovy基本语法介绍
println("hello groovy!") println "hello groovy!"
println "acbc" - "c" //输出abc 字符串的单个的加减,感觉比java方便
def i = 18 //定义变量 弱类型 //集合操作 def list = ['a', 'b']//定义集合 list << 'c' //添加元素 println list.get(1)//获取元素 println list //map操作 def map = ['key1':'value1','key2':'value2'] map.key3 = 'value3'//设置值 println map.get('key1')//获取元素 println map //定义方法类型对象 闭包对象 def b1 = { println "hello b1" } //调用闭包对象的方法, def method1(Closure closure) { closure() } method1(b1) //带参数的闭包方法调用 def b2 = { v -> println "hello ${v}"; } def method2(Closure closure) { closure("aaa") } method2(b2)