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:当前项目的版本号

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.45.0-alfresco</version>
</dependency>

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
<dependencies>
    --设置具体依赖
    <dependency>
        --依赖的信息
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
     </dependency>
 </dependencies>

依赖传递

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

image.png

可选依赖

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

image.png

排除依赖

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

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

image.png

依赖范围

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

scope>compile</scope>

作用范围:

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

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

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

image.png

生命周期与插件

构建生命周期

image.png
image.png

maven高级

分模块开发与设计

image.png

聚合

多模块构建维护

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

image.png

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

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

image.png

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

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

image.png

总结:

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

制作方式:

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

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

<modules>

<module>模块名</module>

<module>模块名</module>

</modules>

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容

  • Maven简介 官网:http://maven.apache.org/[http://maven.apache.o...
    苦难_69e0阅读 640评论 0 3
  • 1. 什么是maven 翻译为“专家”,“内行” Maven是跨平台的项目管理工具。主要服务于基于Java平台的项...
    六月星空2011阅读 435评论 0 1
  • 二、Maven实战 3.通过maven整合ssh框架 3.7 具体实现 3.7.1. 创建客户实体类、映射文件、将...
    Ernest_Chou阅读 336评论 0 0
  • Maven的定义:Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一...
    程守正阅读 388评论 1 2
  • maven maven是一个跨平台的项目管理的工具。隶属于Apache下的一个开源项目。主要服务于Java平台的项...
    jwfy阅读 883评论 0 2