1.工作原理
- pom.xml:project object model,是项目对象模型
- Plug-in:插件
2.Maven的安装
网上下载个maven二进制包,在环境变量中配置一下bin目录即可
3.Setting.xml(配置)
3.1本地仓库
需要注意的是windows电脑上的目录是,不要整错
3.2配置国内镜像仓库
3.3配置maven构建项目JDK版本
4.GAVP属性
Maven中的GAVP指的是Group ID、Artifact ID、Version、Packing等四个属性的缩写,前三个是必要的,而Packing是可选的,默认的是jar包。GAVP相当于在Maven仓库中做一个标识。
- GroupID:一般格式为公司域名.业务线,最多四级。例如com.taobao.tddl
- ArtifactID:产品线-模块名,例如:tair-tool
- Version:主版本.次版本.修订号
- 主版本:增加了能改变产品方向的新功能
- 次版本:做了向下兼容的功能性新功能
- 修订号:修改了版本
- Packing:打包方式
- jar:默认打包方式
- war:web打包
- pom:父工程专用,用于聚合工程
5.Maven工程的结构说明
6.构建
项目构建是指的将源代码】依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
6.1编译
将maven工程中的java文件、资源文件生成对应的class文件,放到target目录(与src同级)
mvn compile
6.2清理
清理生成的target目录
mvn clean
6.3编译测试类
maven工程中,测试类以Test结尾,测试方法以test开头
mvn test-compile
6.4运行测试方法
mvn test
6.5打包
将target打包为jar包/war包,打包前会先经过测试
mvn package
6.6安装
将jar包安装到本地
mvn install:install-file -Dfile=jar包文件地址 -DgroupId=groupId -DartifactId=artifactId -Dversion=version -Dpackaging=jar
6.7生命周期
构建生命周期就是一组固定构建命令的有序集合,出发周期后的命名,会自动触发周期前的命令,例如mvn package包含了compile test package install deploy命令
7.依赖管理
<dependencies>
# 用于管理依赖
</dependencies>
<properties>
# 用于属性管理,常用于定义依赖版本
</properties>
8.依赖范围
9.自定义打包名称
<finalName>wys</finalName>
# jar包会带上.jar,war包会带上.war
10.依赖传递
A依赖于B,B依赖于C,A就是依赖于C,这就是依赖传递
依赖传递只适用于scope为compile
option为true,终止传递
依赖冲突,终止传递
11.依赖冲突
当直接引用或者间接应用出现了相同的jar包,就发生了依赖冲突。依赖冲突分为两种,分别为:自动选择原则和手动选择原则
- 自动选择原则:
- 短路优先原则(第一原则):例如,A依赖于B,B依赖于C(V1.0.0),A又依赖于C(V2.0.0),则会使用C(V2.0.0)
- 依赖路径长度相同情况下,则先声明优先,在中,先声明的,路径相同,会优先选择
- 手动选择原则:
11.Maven继承
Maven继承是指在Maven项目中,让一个项目从另一个项目中集成配置信息的机制,继承可以让我们在多个项目中共享同一个配置信息,方便项目的管理。
父工程需要设置打包方式为POM
子工程的GroupID和Version要与父工程相同
子工程需要设置parent标签,设置父工程的信息
子工程由于Group ID和Version要与父工程相同,因此子工程中不需要设置GroupID和Version
父工程中的Dependencies会直接继承给子工程
父工程中的DependencyManagement,子工程不会自动引入,子工程需要手动引入,但是需要注意的是,子工程手动引入的时候,是不需要Version的
12.Maven聚合
对父进行了什么操作,子工程也会进行什么操作,一键管理。需要在父工程中使用model标签引入子工程。
13.Maven私服
Maven私服是一种特殊的Maven远程仓库,是假设在局域网内的仓库服务,用来代理位于外部的远程仓库
建立的Maven私服后,当需要下载依赖的时候,首先回去本地仓库中找,然后再去私服找,最后才会从远程仓库中找。
13.1Docker中安装Nexus
version: "3.3"
services:
nexus:
image: sonatype/nexus3:latest
container_name: nexus3
restart: always
privileged: true
environment:
- TZ=Asia/Shanghai
ports:
- "8081:8081"
- "28082:28082"
volumes:
- /home/nexus/data:/nexus-data
需要注意的是,nexus挂载的/home/nexus/data目录需要授权,使用chmod 777 /home/nexus/data
13.2登录nexus
- 账号为:admin,密码在/home/nexus/data下
13.3常见的配置
- 本地仓库配置私服
配置完私服后,如果本地仓库和私服中没有依赖,nexus会先从远程仓库中获取,然后本地再从nexus中获取
13.4上传jar包到nexus
pom文件中加入如下配置
<distributionManagement>
<repository>
<id>nexus-mine</id>
<url>http://192.168.126.30:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-mine</id>
<name>Nexus mine</name>
<url>http://192.168.126.30:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
- distributionManagement:这个元素用来配置项目发布的相关信息,特别是将构建结果发布到远程仓库时的目标位置。它通常包含
<repository>
和<snapshotRepository>
子元素,以及其他相关的发布配置 - repository:这个元素配置了发布正式(发布版本)到远程仓库的仓库信息。正式版本指的是经过正式发布的版本,通常是稳定版本。
<id>
:仓库的标识符,通常是一个唯一的名字。<url>
:远程仓库的 URL,指向发布正式版本的目标仓库。
- snapshotRepository:这个元素配置了发布快照(snapshot)版本的仓库信息。快照版本通常表示开发中的不稳定版本,可能会频繁更新。
<id>
:仓库的标识符<name>
:仓库的名称,url>
:远程仓库的 URL
运行命令
mvn deploy
14.忽略测试
mvn install -DskipTests