一.介绍:
maven是一款为java项目构建管理,依赖管理的工具,使用maven可以自动话构建 ,测试 ,打包
和发布项目,大大提高了开发效率和质量
二.安装和配置
下载地址:https://maven.apache.org/download.cgi
历史版本下载:Other Releases - Maven 3 archives
配置变量:MAVEN-HOME :安装地址
path:%MAVEN-HOME%\bin
测试地址:mvn -v
settings.xml 配置:
配置本地仓库:
<localRepository>D:\java\maven\repository</localRepository>
配置中央仓库的阿里镜像:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/\</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置jdk版本:
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>
配置idea工具的maven
File-settings-Build,Execution,Deployment-Build Tools-Manven 路径下:
Maven home path 选择maven安装目录
三.maven定位属性
maven工程相对之前的工程,多出一组gavp属性
maven 中的gavp中GroupID,artfactID, VersionID ,Packaging 四个属性
1) GroupID格式:com.{公司/BU}.业务线.{子业务线},最多4级
例如: com.taobao.tddl 或者 com.alibaba.sourcing.multilang
2)ArtfactID 格式: 产品线名-模块名。语义不重复不遗漏
例如:tc-client/uic-api
3)Version 版本号推荐:主版本号.次级版本号.修订号 1.0.0
主版本号:当作了不兼容的api修改,或者增加了能改变产品方向的新功能
次版本号:当作了向下兼容的功能性新增(新增类/接口等)
修订号:修复bug ,没有修改方法签名的功能加强,保持api兼容性。
例如 初始:1.0.0
修改bug:1.0.1
功能调整:1.1.1
packaging 定义规则:
指示将项目打包为什么类型的文件,idea 根据packaging值,识别maven项目类型
packaging 属性为jar(默认值)代表普通的java工程,打包以后就是.jar结尾的文件
packaging 属性为war ,代表java的web工程,打包以后.war结尾的文件
packaging 属性为pom, 代表不会打包,用来做继承的父工程
四.maven 工程快速搭建
1)安装插件:JBLJAVATOWEB
2)创建一个javase maven 工程
3)maven工程 右键 jbljavatoweb
五.maven依赖管理及构建命令
1)第三方依赖声明
denpendencies --第三方依赖的集合
dependency 每个依赖项
2)查找第三方依赖
mvn 官网:https://mvnrepository.com
maven插件 maven-search
安装插件后 进入 Tools- maven search 输入信息 即可
扩展:
1.提取版本号,统一管理
2.可选属性scope
scope 引入依赖的作用域
默认 compile main test 打包运行
test test junit@Test
runtime main 不会,test 不会, 打包和运行 Class.forName(com.mysql.cj.jdbc.Driver)
provided main test 打包运行不会 Servlet HttpServlet
总结:如果不熟悉,使用默认值即可,全部生效
3.依赖传递:导入依赖,会自动导入依赖的依赖(compile denpendenices)
简化依赖的导入 确保依赖的版本无冲突
依赖冲突:发现已经存在的依赖 会终止依赖传递,避免 循环依赖和重复依赖的问题!
依赖冲突的解决原则:
第一原则:谁短谁优先!引用的路径长度
A -C -B1.0
F -B 2.0 A C F B 2.0
第二原则:谁上谁优先! denpendencies 声明的先后顺序
A-B1.0
F-B2.0
A-F-B 1.0
4.依赖下载失败解决方法:
1)检查网络连接和Maven仓库服务器状态
2)确保依赖项的版本号与队友的版本号匹配并检查Pom文件依赖是否正确
3) 清楚本地Manven仓库缓存文件lastupdated 并删除,刷新重新下载
5.构建命令
项目构建是指将源代码,依赖库和资源文件等转换为可执行或可部署的应用程序的过程,在这个过程包括
编译源代码,链接依赖库,打包和部署等多个步骤
语法: mvn 构建命令 构建命令
mvn clean 清理编译或打包后的项目结构,删除target文件夹
mvn compile 编译项目,生成target文件
mvn test 执行测试源码(测试)
mvn site 生成一个项目依赖信息的展示界面
mvn package 打包项目, 生成war/jar 文件
mvn install 打包后上传到maven本地仓库(本地部署)
mvn deploy 只打包,上传到maven 私服仓库(私服部署)
注意:
1.命令执行必须要我们进入到项目路径
2.部署必须是jar包形式
构建命令周期:
构建命令周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令
,也是一种简单构建的思路
清理周期:主要对项目编译生成文件进行清理
包含命令:clean
默认周期:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分
包含命令:compile -test -package -install/deploy
报告周期
包含命令:site
打包:mvn clean package 本地仓库:mvn clean install
最佳使用方案
打包: mvn clean package
重新编译:mvn clean compile
本地部署:mvn clean install
六.继承
1.继承概念:
Maven继承是指在Maven 的项目中,让一个项目从另外一个项目中继承配置信息的机制。
继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作
2.继承的作用:
作用:在父工程中统一管理项目中的依赖信息,进行统一版本管理
3.继承语法:
父工程
<groupId>org.example</groupId>
<artifactId>maven-shop-parent</artifactId>
<!-- 当前工程为父工程,它要去管理子工程,所以打包方式必须是pom-->
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
子工程
<!-- 使用parent标签指定当前工程的父工程-->
<parent>
<artifactId>maven-shop-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
- 父工程依赖统一管理
父工程声明版本
<!-- 使用denpendencyManagement标签配置对依赖的管理-->
<!-- 被管理的依赖并没有真正被引入到工程-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
子工程声明版本
<!-- 子工程引入依赖,不声明版本号,继承父工程的版本号-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
七.聚合
1.聚合概念
Maven 聚合是指多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程的
构建的过程
2.聚合作用:
a.统一管理子项目构建,通过聚合,可以将多个子项目组织在一起,方便管理和维护
b.优化构建顺序,通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况
3.聚合语法
父项目中包含子项目列表
<modules>
<module>shop-user</module>
<module>shop-order</module>
</modules>