前提:
随着技术的发展,前端和后端都要使用到构建工具
没有自动化构建工具产生之前:
-
依赖管理:将所有使用到的jar包放在lib目录下,少的话几十个,多的话成百上千,有用的,没用的,稍不留神就会出现版本冲突
-
测试:能不写就不写
-
打包:通过eclipse导出war包进行
- 上传:通过ftp上传到服务器,解压,运行
自动化构建工具的种类(几种主流工具):
- ant:编译,测试,打包
- maven:依赖管理,发布
- gradle:使用DSL(特定领域语言):groovy,具有灵活性和可扩展姓
项目流程:
项目布局:
Groovy
Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言,使用该种语言不必编写过多的代码,同时又具有闭包和动态 语言中的其他特性
Groovy兼容java语法,具有如下特性:
- 句尾分号是可选的
- 类和方法默认都是public的
- 编译器给属性自动添加getter和set
- ter方法
- 属性可以直接用点号获取
- 最后一个表达式的值会被作为返回值
- ==等同于equals(),不会有NullPointerExceptions
- 自带assert语句,assert version==2
- 类型可选,def version=1
- 括号是可选的,println(version)
- 字符串,def s1='imooc',def s2="gradle version is ${version}" #可插入变量,def s3=''' my name is imooc''' #可换行
- 集合API
list
def buildTools=['ant','maven']
buildTools <<'gradle'
map
def buildYears=['ant':2000,'maven':2004]
buildYears.gradle=2009
println buildYears.ant
- 闭包
def c1={
v->
print v
}
def c2={
print 'hello'
}
def method1(Closure closure){
closure('param')
}
def method2(Closure closure){
closure()
}
method1(c1);
method2(c2);
依赖管理
解决版本冲突
查看依赖报告 :确定有哪些版本出现了冲突,gradle会默认最高版本的jar包,修改默认解决策略,当出现版本冲突时,直接构建失败,可以知道哪些出现了版本冲突
configurations.all{
resolutionStrategy{
failOnVersionConflict()
}
}
排除传递性依赖
compile( 'org.hibernate:hibernate-core:3.6.3.Final'){
exclude group:" org.slf4.j",module:"slf4j-api" //transitive =false
强制一个版本
configurations.all{
resolutionStrategy{
force ‘org.slf4j:slf4j-api:1.7.24’
}
}
发布
- 插入插件:maven-publish
- 配置:要发布的内容,仓库地址等
- 执行发布