《Maven实战》(许晓斌)导读(读书笔记&第二次读后感)
第一章 Maven简介
- Maven是构建工具,但同时还是jar包管理工具、项目信息管理工具
- 与Make、Ant比较,更为先进
第二章 Maven的安装和配置
- Windows和Unix上安装都很简单,下载压缩包解压,再配置环境变量即可
- jar包默认在~./m2目录
- 可以使用eclipse的maven插件m2eclipse,但不要使用eclipse内嵌的maven
- 使用maven时如内存不够等错误,可通过设置MAVEN_OPS环境变量设置java内存大小
- .m2下的settings.xml是用户的,maven的conf下settings.xml是全局的
第三章Maven使用入门
入门
- 编写pom.xml、写java主代码、写测试代码就可以使用maven打包运行
- 命令mvn archetype:generate生成项目骨架
- 也可使用m2eclipse导入或者生成maven项目
POM
- project是根元素
- modelVersion对于maven2和3,必须是4.0.0
- groupId、artifactId、version是基本坐标(artifact是人工制品的意思)
- groupId是项目属于哪个组
- artifactId是项目或者子项目或者模块
- 推荐每个maven声明name,方便交流
maven编译
- mvn clean compile
- clean是清理target,compile是编译
maven测试
- scope设置为test,主代码import这个jar会报错
- mvn clean test
- 这时应该会报错。因为测试一般用到junit,需要jdk1.5以上,而maven的compile插件由于历史原因默认1.3
- pom.xml增加build-plugins-plugin,maven-compiler-plugin的source和target指定为1.5
打包运行
- 打包mvn clean package
- 打包默认是jar
- 安装mvn clean install
- install会安装到本地的仓库
- 默认的jar不能执行main方法,因为mainfest里没有。设置pom,plugin,maven-shade-plugin,mainclass设定为你的class,再看META-INF/MANIFEST.MF
第4章 背景案例
- 主要uml设计、java包说明等,就3页
第5章 坐标和依赖
这一章非常重要
- maven坐标还有classifier,主要是附属构件,比如一个是jdk1.4的,一个是jdk1.5的。不能定义,只能插件生成
- maven依赖里有type,默认是jar,对应项目的packaging,一般不用声明
- 依赖范围有5个。compile\test\runtime,provided是编译测试有效,运行无效,如servlet-api,因为容器已提供。system制定本机系统的路径,不通过maven仓库,不可移植,谨慎使用还有一个import,对编译、测试、运行不起作用。
传递性依赖
- pom里引入了a.jar,则a用到的jar都会自动引入
- 自动引入是看中央仓库里这个jar平行的pom文件
- 当然a用到了b.jar,那b用到jar也会传递,一直传递下去
- 依赖范围对依赖的传递有影响
依赖调解
- 依赖了同一个jar,则路径最近者优先
- 路径一样则第一声明者优先
- optional为true可选依赖,不会被传递
最佳实践
- 可排除一些传递的依赖
- 最好使用properties定义统一的jar版本
- mvn dependency:list依赖树(大家更常用tree)
- mvn dependency:analyze分析依赖,项目用到但没声明的依赖,还有声明了但没用到的依赖(不能随便删除,要分析)
第六章 仓库
第七章 生命周期和插件
略。
第八章 聚合与继承
- 本章也非常重要
- 聚合在aggregator(名字随便定)模块设置modules-module,aggregator一般放在上层
- 继承在子项目里配置relativePath,比如../xxx-parent/pom.xml
- 继承用到dependencyManagement
- 继承后以来的jar可以不写version,父那里写了,依赖范围也是
- import在dependencyManagement下才有效,配了后把某项目的依赖全部弄过来
- 如果不用dependencyManagement,父的全部jar子都必须继承,这样不太推荐
- 聚合为了方便构建;继承为了消除重复配置
- 父知道聚合了谁,子不知道被谁聚合;子知道继承了谁,父不知道被谁继承
- 约定由于配置,convention over confiuration
- 所有的pom都是默认继承超级pom,超级pom在lib的model-build的jar里
- 反应堆reactor,模块构建顺序,可设置,通过修改配置和命令
第九章 使用nexus创建私服
第十章 使用maven进行测试
第十一章 使用Hudson进行持续集成
几年前已搭建过nexus,使用过jenkins、cargo,略。
第十二章 使用maven构建web应用
- web的目录结构src-main-webapp
- 默认是jar,需要packaging:war
- 制定war包名字:build-finalName
第十三章 版本管理
略。产品需要版本多一些。项目较少。svn专人管理。
第十四章 灵活的构建
- 开发环境、测试环境、生产环境的多环境构建很重要,一般都要用到
- 通过profiles定义各个环境
- 在代码的配置文件中定义变量${aaa}
- 在pom里制定aaa在各个环境中的值
- 在pom里资源过滤
- 打包时命令加-P,mvn clean install -Pdev,假设开发环境在pom的profile里id定义为dev
- 可以激活多个profile,mvn clean install -Pdev-x,dev-y
- 可以根据属性激活,mvn clean install -Pdev=x。前提需要profile里配置name和value
- 可以设置默认激活,可以根据文件是否存在来激活
- profile除了pom,也可以在settings。xml配置。
- 资源过滤除了可以过滤resource,也可以过滤webapp里,用webResources
第十五章 生成项目站点
第十六章 m2eclipse
第十七章 编写maven插件
第十八章 Archetype
附录
略。这些不太常用,或者比较简单不太重要。
我的感想
不足:
- 没有列出maven推荐的全部目录,比如filters等
- Hudson,也就是jenkins章节过于简单
- 多环境配置profiles章节不够完整,最为常用的目录配置没有讲,只讲了变量配置
- 好像没有介绍-X等debug命令项,和最一些报错的注意事项(也许我读漏了)
- eclipse插件我遇到过蛮多问题,书里没有详细解说,或者作者喜欢命令行
- 对老项目的迁移也没怎么涉及
总的来说,还是很优秀的书。因为:
- 就这一本,没别的
- 最近买了方志朋的《深入理解spring cloud与微服务构建》,看了后,实在无语,衬托出许晓斌的很好
- 几年后再次认真阅读,感受不同。揭开了几年里的一些积累的疑惑
《Maven实战》(许晓斌)导读(读书笔记&第二次读后感)的更多相关文章
- [Maven实战-许晓斌]-[第二章]-2.1在Windows上安装maven
来源:<maven实战> 1.检查JAVA_HOME和java -version C:\Users\admin>echo %JAVA_HOME% C:\Users\admin&g ...
- [Maven实战-许晓斌]-[第三章] Mave使用入门二(在IDE中的使用) [第四章] 案例的背景介绍
创建maven项目
- [Maven实战-许晓斌]-[第三章] Mave使用入门
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- [Maven实战-许晓斌]-[第二章]-2.6 NetBeans上面安装Maven插件
NetBeans上面安装Maven插件
- [Maven实战-许晓斌]-[第二章]-2.5 Eclipse上面安装Maven插件 m2eclipse
Eclipse上面安装Maven插件 m2eclipse --需要特别指出的是,越来越多的最新的Eclipse版本自带Maven m2e http://m2eclipse.sonatype.org/s ...
- [Maven实战-许晓斌]-[第二章]-2.3安装目录分析
bin boot conf settings.xml非常重要 这个是maven安装包自带的settings.xml 通常我们会放在习惯路径,C:\Users\admin\.m2\下面 即 用户路径\ ...
- [Maven实战-许晓斌]-[第二章]-2.7-2.8 Mave安装的最优建议和安装小结
2.7
- [Maven实战-许晓斌]-[第二章]-2.4设置HTTP代理
- [Maven实战-许晓斌]-[第二章]-2.2基于UNIX系统安装maven
>> >> >>3
随机推荐
- SQL Server-索引管理
http://www.2cto.com/database/201305/207508.html SQL Server-索引管理 一.显示索引信息 在建立索引后,可以对表索引信息进行查询. (1)在 ...
- org.osgi.framework.BundleException: Exception in org.eclipse.core.resources.ResourcesPlugin.start()
http://freestyle21.cn 不知什么时候,启动eclipse的时候就一直不行,说是an error ..我查了下log 报错:org.osgi.framework.BundleExce ...
- Linux下汇编语言学习笔记20 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Python基础之 一
语言分类:编译型(运行前先编译)和解释型(直接运行),静态语言(需要声明变量类型)和动态语言(不需要声明),强类型定义语言(定义好类型不做强制转换就不可修改类型)和弱类型定义语言(数据类型可以被忽略) ...
- MongoDB小结04 - update【$inc】
update方法很强大,它有两个参数,一是查询文档,用来找出需要更新的文档,另一个是修改器(modifier)文档,描述对找到的文档做哪些修改. 亮点 更新操作是原子的,若两个更新同时发生,先到达服务 ...
- Java发送邮件示例
利用Java发送邮件示例: 1.发送QQ邮件 import java.util.Properties; import javax.mail.Message; import javax.mail.Mes ...
- Sql查询一个列对应多个列
Sql查询一个列对应多个列 今天遇到一个问题,表table1有两个字段col1.col2两个字段.先记录下来,以后有个参考. 现在需要查询出的数据满足如下要求: 1.col1重复.col2重复的数据只 ...
- Java正则表达式过滤出字母、数字和中文
原文:http://blog.csdn.net/k21325/article/details/54090066 1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A ...
- [52ABP系列] - 002、模板项目配合代码生成器开发
前言 本篇的主要内容是 52ABP SPA模板如何配合52ABP代码生成器开发项目 如果不了解 52ABP 项目请先看我的第一篇文章 [52ABP系列] - 001.SPA免费项目模版搭建教程 话不多 ...
- label显示不同颜色的字体
NSString *contentSrt = [NSString stringWithFormat:@"%@ (%@)",categoryModel.categoryName, c ...