Maven学习

maven基础

maven的概念和作用

maven是什么?

传统项目很容易导致jar包不统一,jar不兼容问题

maven是基于项目对象模型(pom),可以通过一段配置来管理项目的构建

工程之间有两种关系:依赖和聚合

image.png

maven的作用

项目构建:提供标准的、跨平台的自动化项目构建方式

依赖管理:方便快键的管理项目依赖的资源(jar包),避免资源建的版本冲突问题

统一开发结构:提供标准的、统一的项目结构

image.png

maven的下载和安装

去官网下载并安装,配置环境变量,使用mvn命令验证

maven基础概念

仓库:用于存储资源,包含各种jar包

仓库分类:

  • 中央仓库:是Maven公司自己维护的仓库,里面有大量的常用类库,并包含了世界上流行的开源软件项目包。

  • 本地仓库:Maven工程中依赖的构件(jar包)从远程下载到本机目录中,一般情况下我们会指定本地仓库路径,从网上下载jar放到本地仓库中,项目每次使用时候直接从本地仓库中拿就可以了。

  • 第三方仓库:一般是由公司设立的仓库,供本公司所有项目使用,减少了向中央仓库访问请求,提高了工作效率。私服必须单独配置,如果没有配置那么不使用私服。

image.png

坐标

  • 什么是坐标?

    maven中坐标就是用于描述仓库中资源的位置

  • maven坐标主要组成

    groupId:定义当前maven项目隶属组织名称

    artifactId:定义当前maven项目名称

    version:当前项目的版本号



    org.seleniumhq.selenium
    selenium-java
    2.45.0-alfresco

maven jar包查询地址:https://mvnrepository.com/

仓库配置

本地仓库配置

maven默认的地址是放在c盘,但是作为系统盘,鉴于jar包的数量,我们需要将其更改位置存储

1、打开你maven安装的位置,打开conf/settings.xml文件,定位到localRepository

2、可以看到注释掉的代码,default默认在系统盘

image.png

远程仓库配置

maven默认是从中央仓库获取资源,但是中央仓库是在国外,我们去访问速度肯定是会慢的,此时我们就要使用镜像仓库配置,阿里云镜像仓库

也是一样在settings.xml文件中定位到mirrors位置

image.png

maven项目构建命令

编译:mvn compile  --src/main/java目录java源码编译生成class (target目录下)

测试:mvn test    --src/test/java 目录编译

清理:mvn clean    --删除target目录,也就是将class文件等删除

打包:mvn package  --生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下

安装:mvn install   --将压缩文件(jar或者war)上传到本地仓库

部署|发布:mvn deploy  --将压缩文件上传私服

pom.xml

image.png

依赖管理

依赖配置

依赖指当前项目运行所需要的jar,一个项目可以设置多个依赖

格式:

--设置当前项目所有依赖的jar

    --设置具体依赖
    
        --依赖的信息
        com.oracle
        ojdbc6
        11.2.0.3
     
 

依赖传递

比如说 A 依赖于 B模块的内容,则可以将B配置到A的配置中,此时A就会具有B中依赖的所有jar包

image.png

可选依赖

在上面依赖传递中,如果B配置中不想让A知道自己用了什么依赖则可以在依赖中使用true 标识,true表示隐藏

image.png

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

比如A依赖了B,拥有了B中依赖的jar,但是A本身不想使用则可以使用

image.png

依赖范围

依赖的jar默认情况可以再任何地方使用,可以通过scope标签设定其作用范围

scope>compile

作用范围:

主程序范围有效(main文件夹范围内)

测试程序范围有效(test文件范围内)

是否参与打包(package指令范围内)

image.png

生命周期与插件

构建生命周期

image.png
image.png

maven高级

分模块开发与设计

image.png

聚合

多模块构建维护

将模块拆分成多模块之后,当ssm_dao层更新版本后,比如其他模块也会被影响,那要如何解决,就必须要将其他模块一起更新,但是模块互相独立,所以就需要一个模块来管理这些分模块。

image.png

只需再新增一个模块,再这个模块的pom文件中加上

pom 就可以定义改工程用于进行构建管理

image.png

那如何去管理这些模块呢?

这个标签可以知道管理了哪些工程列表

image.png

总结:

聚合的作用就是用于快速构建maven工程,一次性构建多个项目/模块

制作方式:

1、创建一个空模块,打包类型定义为pom

2、定义当前模块进行构建操作时关联的其他模块名称



模块名

模块名


3、模块的类型

  • pom
  • war
  • jar

注意:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关

继承

模块之间依赖关系,不同的模块之间其资源依赖是不一样的,但是由于相互依赖,可能导致其中一个模块的资源的版本与另外一个起冲突,为了解决这个问题,我们可以使用一个模块来对这些总资源进行管理,也就是子模块在使用的时候只需要输入要依赖的资源名,不需要输入资源的版本号

image.png

在子模块中可以 定义该工程的父工程

image.png

总结:

继承的作用可以通过继承实现在子工程中 沿用父工程的配置

maven中的继承和java相似,在子工程中配置继承关系

制作方式:

1、在子工程中声明其父工程的坐标和对应位置

image.png

2、在父工程中定义依赖管理

image.png

3、在子工程中定义资源依赖关系,无需再声明依赖版本了,版本按照父工程中依赖的版本

image.png

为此解决了多模块之间依赖版本不统一问题

继承和聚合的区别?

聚合用于快速构建项目,继承用于快速配置

相同点:

  • 聚合与继承的pom.xml文件打包方式均为pom,可以将两类关系制作到同一个pom文件中
  • 聚合与继承属于设计性模块,并无时间的模块内容

不同点:

聚合是在当前模块中配置关系,聚合可以知道参与聚合的模块有哪些

继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

属性

Maven属性是值占位符,如Ant中的属性。它们的值可以通过使用符号${X}在POM中的任何位置访问,其中X是属性。

在命令行使用属性时,是-D,比如:mvn -Dinput=test

也就是在管理依赖时,一个项目如果存在多个依赖,你一个个去看每个依赖的版本就得去找,这时候我们就可以统一在主管理模块中统一位置配置一个变量名,版本再取这个变量名

image.png

属性类别:自定义属性、内置属性、setting属性、java系统属性、环境变量属性

  • 自定义属性

    作用等同于定义变量,方便统一维护

image.png

版本管理

工程版本

SNAPSHOT(快照版本)

  • 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
  • 快照版本会随着开发的进展不断更新

RELEASE(发布版本)

  • 项目开发进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

工程版本号约定

image.png

资源配置

资源配置多文件维护

image.png
image.png

多环境开发配置

image.png

在pom文件中使用

image.png

继续努力学习啊!!

image.png

你可能感兴趣的:(Maven学习)