• 《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 est untime,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与微服务构建》,看了后,实在无语,衬托出许晓斌的很好
    • 几年后再次认真阅读,感受不同。揭开了几年里的一些积累的疑惑
  • 相关阅读:
    项目的搭建步骤:
    MySQL复习笔记记录
    记录搭建SSM框架中常用到的功能:(监听器)、过滤器和拦截器 以及相关的拓展内容的学习记录
    为什么要配置spring**.xml或者applicationContext.xml --学习笔记
    java8 Lambda表达式学习笔记
    java多线程高并发学习从零开始——初识volatile关键字
    java多线程高并发学习从零开始——新建线程
    JVM工作机制以及异常处理之内存溢出OOM(OutOfMemoryError)/SOF(StackOverflowError)--Java学习记录2——更新中
    记录使用idea构建出现错误:failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar——Java学习记录3
    Oracle创建用户和表空间的步骤 和 导入dmp文件的方法 —— 数据库学习
  • 原文地址:https://www.cnblogs.com/ouyida3/p/9190859.html
Copyright © 2020-2023  润新知