安装步骤:
1、安装jdk
2、从官网中下载对应的版本
3、解压安装,然后配置环境变量,将bin目录添加到path路径下
4、在命令行中输入mvn -v,看到版本信息表示安装成功
maven通过坐标的方式来获取 jar包,坐标组成为:公司/组织(groupId)+项目名(artifactId)+版本(version)-- GAV 组成,可以从互联网,本地等多种仓库源获取jar包
本地仓库就是开发者本地已经下载下来的依赖仓库
本地仓库路径配置在maven对应的conf/settings.xml配置文件。
设置本地仓库:
中央仓库即maven默认下载的仓库地址,是maven维护的
所有的 maven 项目都会继承超级pom
,超级pom
文件位置:
(apache-maven-3.6.3\lib\maven-model-builder-3.6.3.jar包中的 org/apache/maven/model/pom-4.0.0.xml),如图:
注意这里的
私有仓库可以理解为自己公司的仓库,也叫Nexus私服
由于网络访问的原因,在国内如果需要下载国外jar包的时候会受限,因此一般在使用过程中需要修改maven的配置文件,将下载jar包的仓库地址修改为国内的源,常用的是阿里云的mvn仓库,修改配置如下:
maven目录/conf/setting.xml
设置镜像:
其中,mirrorOf的值是 central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,
id 表示镜像的唯一标识符,name 表示镜像的名称,url 表示镜像的地址。
nexus-aliyun
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
central
Maven是Apache下的项目管理工具,它由纯Java语言开发,可以帮助我们更方便的管理和构建Java项目。
maven的优点
1、 jar包管理:
a) 从Maven中央仓库获取标准的规范的jar包以及相关依赖的jar包,避免自己下载到错误的jar包;
b) 本地仓库统一管理jar包,使jar包与项目分离,减轻项目体积。
2、 maven是跨平台的可以在window、linux上使用。
3、 清晰的项目结构;
4、 多工程开发,将模块拆分成若干工程,利于团队协作开发。
5、 一键构建项目:使用命令可以对项目进行一键构建。
idea:
clean 删除target目录
compile 编译项目,生成target目录
packet 打包
install 安装
deploy 部署
注意:idea是按照顺序执行下来,如packet就会依次执行clean-validate-compile-test
命令行:
mvn clean 删除target目录
mvn compile 编译项目
mvn package 打包项目 ( mvn clean package -Dmaven.test.skip=true 跳过测试类打包 )
mvn install 安装
maven 核心功能总结:
对于项目所依懒的组件与会本地仓库比较,如果本地仓库不存在则会从中央仓库下载。
我们的项目通常需要依赖第三方组件,而第三方组件又会依赖其它组件,遇到这种情况Maven会将依赖网络中的所有节点都会依赖进来,这就是Maven的依赖传播特性。
如
org.springframework
spring-webmvc
5.3.21
项目直接依赖了spring-webmvc 叫直接依赖,而对spring-aop等的 依赖是通过webmvc传递的所以叫间接依赖。
基于依赖传播特性,导致整个依赖网络会很复杂,难免会出现相同组件不同版本的情况。Maven此时会基于依赖优先原则选择其中一个版本。
第一原则:最短路径优先。
第二原则:相同路径下配置在前的优先。
optional是maven依赖jar时的一个选项,表示该依赖是可选的,不会被依赖传递。
org.springframework
spring-webmvc
5.3.21
true
即排除指定的间接依赖。通过配置
org.springframework
spring-webmvc
5.3.21
org.springframework
spring-aop
像junit 这个组件 我们只有在运行测试用例的时候去要用到,这就没有必要在打包的时候把junit.jar 包过构建进去,可以通过Mave 的依赖范围配置
来达到这种目的。maven 总共支持以下四种依赖范围:
如:compile默认值(不写默认就是compile)
provided:servlet-api写代码需要依赖,要不然编译会报错,但是打包的时候不需要打进去,因为Tomca容器里面包含servlet-api了
runtime:mysql的依赖再编译时可以不依赖,但是运行的时候需要依赖
test:测试包在打包的时候不需要打到war或者jar包里面的,如Junit,运行的时候不需要,放进去会让包变大
system一般不用
示例项目: micro/userpay
是指将多个模块整合在一起,统一构建,避免一个一个的构建。聚合需要一个父工程,然后使用
注意:父工程一般是不需要src目录的
common
user
order
继承是指子工程直接继承父工程当中的属性、依赖、插件等配置,避免重复配置。
上面的2个配置子工程都可以进行重写,重写之后以子工程的为准。
通过继承的特性,子工程是可以间接依赖父工程的依赖,但多个子工程依赖有时并不一致,这时就可以在父工程中加入 声明该工程可能使用的jar包,然后在子工程中引入(不同加版本,如果父工程中没有定义版本,子工程中需要加)。
譬如
junit
junit
4.12
junit
junit
通过
5.2.6.RELEASE
1.9.5
org.springframework
spring-webmvc
${SPRING.VERSION}