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)