知识整理详细版见于尚硅谷最新maven课程
1、maven是一个依赖管理工具
- 管理jar包规模
- jar包来源(涉及到maven私服的知识)
- jar包导入
在web工程中,jar包必须存放在指定位置
在使用Maven之后,通过配置依赖(jar包)的坐标,查找本地仓库中相应jar包,若本地仓库没有,则统一从镜像网站或中央仓库中下载
- jar包之间的依赖
2、maven是一个构建工具
项目构建是指将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序或库的过程。
3、配置本地maven
- 下载maven
- 配置环境变量和本地仓库位置
- 更改conf——setting.xml文件,包括三方面:mirror镜像,提高下载速度;jdk编译版本; 本地仓库localRepository位置
4、maven指令及效果
名称 | 指令 | 作用 | 效果 | 其他1 | 其他2 |
---|---|---|---|---|---|
清理 | clean | 清理编译或打包后的项目结构 | – | – | – |
编译 | compile | 生成字节码文件 | .java->.class | 生成target文件,同main文件列于src目录下 | – |
打包 | package | 生成jar/war包 | 保存在target目录下 | ||
安装 | install | 打包后上传到maven本地仓库 | 区别于package单纯打包 | 举例:公共工程jar包需要上传到本地仓库 | |
测试 | test | ||||
部署 | deploy | 只打包上传到maven私服仓库 | |||
生成站点 | site |
测试:方法名 testxxxx 开头; @Test注解; 类名以Test结尾
测试是打包前的操作,所以打成的war包中无测试文件
5、maven生命周期
- 清理
- 编译
- 测试。执行工程中的测试文件
- 报告。记录当前测试结果,保存在target—surefire reports中
- 打包
- 部署。上传到服务器上
6、POM 项目对象模型
dependency 依赖管理模型
dom 文档对象模型 js中的
7、maven文件目录
-
bin。含有maven的运行脚本,如mvn.cmd
PS 配置到path系统变量的作用:当前目录下的指令在任何目录下都可用
-
boot。含有plexus-classworlds 类加载器
-
conf。含有maven的核心配置文件
-
lib。含有maven运行时所需要的java类库
-
license、notice、readme.txt。针对maven版本,简要介绍第3方软件等
8、GAVP属性
为maven仓库做标识,类似姓名
-
groupId。组织id。org/com-公司线-业务线-子业务线。最多四级。
-
artifactId。模块id。产品线名-模块名。比如,gulimall-order订单模块
-
version。版本。主版本.次版本(功能调整).修订号(bug修复)。relaese表示正式版,snapshot表示快照,临时版。比如,3.8.8
-
packaging。打包方式
- jar:普通java项目 - war:web工程
- pom:父工程。不会打包,用来做继承的父工程。
9、普通java工程转换为web工程的方法
方法一:pom.xml打包方式写为war,或者项目结构中新建web模块,得资源路径
在项目结构那,找到合适的位置,新建web.xml文件,路径写为/src/main/webapp/WEB-INF
参照下面的资源路径
方法二:安装插件JBLJavaToWeb
工程右键,找到JBLJavaToWeb选项,点击ok
webapp目录要有蓝色小圆点,否则创建未成功,只是普通目录
方法三:新建工程时,maven archetype 骨架,选择web app。模块。只是版本低1.0.0,其他是4.0.0
运行/调试配置—选择本地tomcat—更新时执行Reploy重新部署—on frame deactivation失去焦点时:更新类和资源
10、maven项目结构
11、war包打包插件和jdk版本不匹配
pom.xml中增加maven-war-plugin
12、maven依赖下载失败
清楚缓存
maven本地仓库下根据坐标找到 lastupdated 结尾的文件,删去
13、指定打包文件
比如,打包文件命名
正常是resources下的xml文件,现要求包括src.main.java下
14、提问:tomcat和maven的区别?
看完视频讲解,tomcat是容器,maven是工具
搜到别人相关面试题
15、如何理解,进行构建时,用到了maven插件
16、依赖作用范围
编译环境(main)、测试环境(test)、运行环境(war包中是否可用)
不建议手动再修改,参照官网
-
complile。编译依赖范围,scope的缺省值,以上三种环境均可用,如log4j
-
test。测试依赖范围,只在测试环境、测试classpath下可用。如junit
-
provided。已提供依赖范围,只对编译/测试classpath有效。运行无需提供,服务器依赖的jar包已有。如servlet-api
-
runtime。运行依赖范围,只有测试/运行classpath有效
-
system。系统依赖范围,与provided使用一致,不推荐使用
-
import。导入依赖范围,与dependencyManagement元素配合使用(父工程)
只有compile下的依赖才能传递,其他情况下都不能
标签dependency下的 <optional>true</optional>
终止依赖传递
17、依赖冲突
自动选择原则
-
第一原则,短路优先原则
A–>B–>C–>D–>E–>X(version 0.0.1)
A–>E–>X(version 0.0.2) ✌️
-
第二原则,路径长度相同时,则先声明优先
手动排除
<dependency>
标签下写上<exclusions><exclusion>。。。。。。</exclusion></exclusions>
18、maven工程继承
父工程
<packging>pom</packging>
用<dependencyManagment>(子工程中只用写groupId和atifactId,版本号由父工程决定)
代替<dependencies>(父工程无条件继承依赖)
子工程
使用parent标签指定当前工程的父工程
<parent><groupId>父工程的坐标<artifactId>
谷粒商城的例子:
common模块,继承和聚合不能同时存在
18、maven工程聚合
<modules>
标签,不是工程名,而是路径,如…/maven_A
谷粒商城的其他例子
19、maven私服
用来代理外部的远程仓库,如Nexus