Maven是一款为java项目构建管理,依赖管理的工具,使用Maven可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量
Maven构建触发方便,并且构建要求项目结构
Maven在idea中是项目独立的,每个项目需要file-settings-build-build tool-maven配置本地路径
部署过程
清理,编译,测试,打包,报告,部署
GAVP属性
GroupID:com.公司/BU.业务线.子业务线,最多四级
ArtifactID:产品线名-模块名
Version版本号:主版本号(不兼容的API修改或增加了改变产品方向的新功能).次版本号(向下兼容的功能新增,新增类或接口等).修订号(修复bug或没有修改方法签名的功能增强)
Packaging属性:默认jar(普通java工程),war(java web工程),pom用来继承的父功能
web项目创建
手动创建:
1.创建javase项目工程
2.补全文件结构main-webapp-WEB-INF-web.xml
3.修改pom.xml打包方式packaging为war形式
4.刷新,webapp会多一个蓝点为创建成功
自动创建:右键工程选择JBLjavaweb即可
Maven项目结构
依赖管理
依赖信息集合dependencies,每个依赖项dependence,内部包含依赖信息GroupID和ArtifactID,Version
还有可选属性scope,控制引入依赖的作用域,默认compile,可以在main,test和打包运行中使用。test为只在test中使用。runtime为打包和运行中使用(mysql中运行时反射注册)。provided仅在main和test中使用(Servlet在tomcat中会提供)。
获取依赖信息方法:1.通过Maven官网https://mvnrepository
2.使用Maven插件maven-search,在tools中有maven-search
可以提取版本号统一管理,在properties中声明标签变量,命名建议两层以上命名,防止与默认标签重复,引用时使用$(标签名)引用
依赖传递
为了减少重复依赖、自动管理依赖、确保依赖版本正确性
传递依赖:会自动导入依赖的依赖
依赖冲突:当发生重复依赖导入时会终止依赖传递,避免循环依赖
发生依赖冲突说明产生了重复依赖
依赖冲突解决原则:1.引用路径短的优先。2.按照依赖代码先后顺序
发生依赖冲突,不依赖的版本所依赖的后续资源都不会被引入
依赖导入失败
错误原因:1.下载依赖时出现网络故障或仓库服务器宕机(检查网络或服务器状态)
2.依赖项的版本号或配置文件中的版本号错误,或依赖项没有正确定义(写错了)
3.本地maven仓库或缓存被污染或损坏(清除本地保存的lastUpdated文件,刷新重新下载)
扩展构建管理
项目构建指将代码,依赖库和资源文件等转换成可执行或可部署的应用程序的过程,包括编译源代码,链接依赖库,打包和部署等步骤
主动触发场景:重新编译,打包,部署本地或私服仓库
可以通过命令方式构建:mvn 构建命令 构建命令...
或可视化方式构建:打开maven,通过项目下的lifestyle中的命令构建
构建命令周期
简化了触发构建命令过程
有序地构建命令容器,清理clean,构建compile,test,package,install/deploy,报告site
触发构建周期后的命令会自动触发同一周期前的命令
周期包含若干命令,命令包含若干插件。使用周期命令构建,最终进行构建的是插件
插件配置在pom.xml中<build><plugins><plugin>中配置</build></plugins></plugin>
Maven继承
一个项目从另一个项目中继承配置信息的机制,可以让多个项目中共享同一配置信息,简化项目管理和维护工作
在父工程中统一管理项目中的依赖信息,进行统一版本管理
父工程不打包也不写代码,通过xml指明依赖
子工程中通过xml中的parent标签指定继承父工程的gav属性,子工程中只需要写明ga属性即可,不需要写Version,子类Version会覆盖父工程版本
父工程中<dependencies>导入依赖,所有子工程都会有该依赖
父工程中<dependencyManagement>导入依赖,可以被子工程继承版本号,可以在里面套<dependencies>
Maven聚合
将多个项目组织到一个父级项目中,通过出发父工程的构建,统一按顺序出发子工程构建的过程
方便统一管理子项目构建,优化构建顺序
创建子工程后会自动在父工程中添加<moudles><moudle>子工程