A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 逆风TO 于 2020-2-12 16:47 编辑

maven
最近稍微有些许空闲,想重新认识下maven,(这是读mei vn,不要再度ma了!!!!听好多人读错,我感概万分啊)现在大部分工程都应该是maven管理的吧。相比classPath的方式放jar与ant指定路径那些蛋疼的方式,我相信大家都或多或少被坑过,所以maven的优势其实是可以一决高下的

⦁        认识Maven
maven是什么,首先大同的来讲他就是个项目构建,管理,jar包下载的工具,你可以从某个大仓库下载你所需要的Jar到你本地仓库,可以理解为坐标定位Jar然后搬运至你本地去引用吧。

首先下载与配置这里就不多唠叨了,可自行百度,我这里就简单来了解下maven的目录、
1.bin maven命令的存放点
2.boot maven自带的jar,可以理解maven自己的类加载器他需要加载一些自己本身需要的类
3.conf 配置 其中比较重要的就是setting.xml 我们就讲几个重要的注标签
localRepository 本地仓库绝对路径
proxies maven自带的翻墙工具
servers 你的本地私服地址
mirror 镜像 拉取Jar,这里博主推荐阿里和thirdparty 其他的就比较差一点了
profiles 读取配置 可用去切换环境
pluginGroups 自己的插件管理
其他不常用 可以百度了解
4.lib maven的库

⦁Maven加载setting顺序
在项目中先读取用户user目录下的setting.xml开始 没有就读你全局你maven目录中的setting.xml所以需要把控

⦁        Maven的优势
maven的优势大致我总结了以下6点

其突出的思想 convention over configuration,约定优于配置
简单
测试支持
构建简单自动化
Continuous integration,ci集成
插件丰富
⦁        解析Maven 项目中的Pom.xml
我们先new一个maven的项目,如图

groupId一般是你公司域名倒写
artifactId你可以看作是功能,
version是版本号,相信大多数公司都是以SHAPSHOT结尾,这个的意思是此版本为不稳定版本,一般不用为线上,稳定版本基本上是release与Final结尾,具体可参照hibernate和redis版本,这里其实拓展的来说可以去搜索git项目的管理方式思想
packaging为打包的方式可以是war,jar,pom等
modelVersion是maven超级Pom中的版本号,这里涉及到的超级Pom便是你工程为什么src下是java然后再是包,这里就存在着 convention over configuration,包括你进入其中 都是模板的思想,所以大家可以去看下
具体位置在lib中的maven-model-builder包中,可以解压来看这个pom看下

Maven依赖标签
1.dependencyManagement 依赖包管理 虽然可以出现在各个模块中但是博主推荐此标签应该出现在父工程中,该注标签我分为三点
.⦁        只能出现在父pom
⦁        统一版本号
⦁        声明 (子POM里用到再引)!!!!

dependency 依赖包标签,内标签有type默认jar 包的作用范围(这里不细讲了,有compile,test,provided,runtime,system,具体区别就是编译 测试 运行时 和打不打包的区别,system是本地jar,你说万一你找了个私人的那只有这个标签能帮你了,不推荐风险性)
Maven的依赖传递
这里举个例子 如果 c包里面依赖了b包, 此时我a包依赖了c包,那么我a包也是依赖c包的,不需要再次冗余依赖,scope的依赖传递用的不多可百度了解

Maven的最短路径依赖
同样 如果c包依赖了b包 此时我a包依赖了c包,a包又依赖了b包,那么a包优先级是读取自己依赖的b包 不会再读取c包中依赖的a包了

Maven依赖包的读取顺序
同样 如果c包依赖了b包 ,d包依赖了b包 ,但是c包中的b包版本为1.0-SHANSHOP,而d包中的
b包版本为1.1SHANSHOP, 此时a包同时依赖c,d 那么这时候a包中的b包是和书写顺序有关,解析xml谁在前取谁版本

Maven查看依赖排序jar冲突
进入工程目录下,mvn dependency:tree >showD.txt 排查jar依赖关系和冲突,,其他maven命令相信大家都熟悉

⦁        Maven的生命周期
clean->default->site 为一次maven生命周期
其中clean 中又分多个phases,包括pre-clean,clean,post-clean,当然default中也存在很多phases,这里贴出一张图大家就知道了

最主要的一点就是 一个阶段build会有许多Phases ,一个phase会有很多goals

这里举例插件有findBugs,tomcat,打包所需要的jdk指定,source 是否打包源代码(对接第三方时千万别要写这个插件,除非你想被开除,嘿嘿嘿)以及assembly 打包zip、war方式等等,要想细讲这些插件 可以一时半会真难讲解,我们今天的重头戏可是自定义插件

⦁        Maven自定义插件
先上代码

这是Pom.xml

首先两个包不用多说 是maven的插件包,自定义的类需要继承AbstractMojo,重写执行方法execute(),熟悉的画风啊,值得注意的是打包方式必须是maven的插件方式,然后需要mvn clean install 入自己本地repository
然后我们再new一个项目


将这个插件包引入至plugin标签中,值得一提的是博主这里是将他再package插件时候运行,如果没有execution绑定固定插件,那么你Install 是不会执行自己的插件的,他只会执行Install之前所有生命周期内的插件,来看下效果图吧



是不是很玄幻,用途嘛,你可以干很多事哦,你可以统计你的文件,读取你的文件,包括安全性检测等等,pom中存在很多系统的变量,比如当前的版本project.version,或者拿到当前工程目录 {project.version},或者拿到当前工程目录project.version,或者拿到当前工程目录{project.basedir}等等

⦁        Maven自定义插件 传值问题

我们改造一下
紧接着

变量传入成功,configuration是不是很眼熟,对了tomcat的插件指定端口就是这个标签体哦.注入List是不是有点熟悉?如果我们想传入Map 什么的怎么办呢?Spring 的xml注入 快去复习下!!!!
最后我们举例一下mvn clean -U

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马