Maven是什么

Maven

简介

正确读音:

在这里插入图片描述

Tomcat是Apache下的一个项目, 基于JDK, 是网络容器, 提供了网络支持的工具.

Maven也是Apache下的一个项目, 也是基于JDK, 是项目管理构建工具.

构建

构建不是创建, 构建一个项目 != 创建一个项目

一个项目从创建, 到完成源码编写, 最后将项目部署到网络服务器, 供所有人访问的过程叫项目构建。

所以: 构建过程

​ 创建项目 --> 源码编写 —> 编译 --> 运行—> 测试—> 打包—>部署

Maven对整个项目构建流程进行管理,能够大大提高工作效率, 为程序猿减负。

市场上还有很多构建工具:

1. gradle
2. Ant

但都没有maven流行, maven现在是Java领域里, 项目管理构建的老大哥.

为什么使用Maven

传统JavaWeb开发方式

在这里插入图片描述

TOMCAT 网络容器(Servlet容器), 提供网络支持, 程序猿不需要关心网络代码.

JavaWeb开发中, 经常用的 HttpServletRequest request , HttpServletResponse response就是Tomcat帮我们创建, 将请求数据封装到了request对象中. 我们自己将响应数据封装到response对象中,响应浏览器,在页面上显示数据。

业务代码: 完成客户需求所写的代码, Java程序猿以业务为核心

通常后端开发架构为: 三层架构模型MVC, 分层后 分工明确, 逻辑清晰, 项目易于维护

M: Mode 指的是 业务层和持久层 专注于核心业务代码, 处理数据

V: View 指的是 视图层/ 展示层 专注于展示数据

C: Controller 指的是 控制器层 专注于数据验证, 与数据的请求响应打交道 也就是API层

程序运行所需jar包

最终程序 = 我们自己写的部分(mvc) + 程序运行所需jar包(公司内部打成的jar包 或者 是第三方提供jar包)

公司内部jar包 : 中大型公司在中大型项目上一般会分成多个小组, 每个小组负责几个模块, 模块与模块是相关联的, 所以小组与小组之间通常以jar包的形式配合开发, 协助开发.

第三方jar包:

  1. 做支付用的: 支付宝相关jar包, 微信相关jar包
  2. 做上传用的: Apache Commons fileupload.jar包
  3. Spring框架: Spring相关jar包
  4. SpringMVC框架: Spring web相关jar包
  5. Mybaits框架: Mybaits相关jar包
  6. 数据库驱动包: Mysql相关jar包, Oracle相关jar包等
  7. 各种各样的工具包.

在这里插入图片描述

传统JavaWeb开发存在的问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pcicGwHb-1607047618679)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122092917897.png)]

  1. Jar包找起来麻烦 如: 一个程序猿得从其他项目copy, 缺少的包得从网络上找, 耗时严重, 如果, 找不到, 自己开始造轮子, 而且还不一定好用, 除了维护业务代码, 还得负责维护轮子。
  2. 缺少依赖 如: A包依赖B包, 结果只引入了 A包, 没有引入B包, 出现报错, 更可怕的是依赖链条很长
  3. 寻找正确的依赖包困难耗时 如: C包依赖V3.0.0, 结果引入的是V1.0.0
  4. 版本冲突 如B和C都同时依赖E, 但两者依赖的C的版本都不一样, 一个V1.0.0, 一个V3.0.0,A通过依赖传递, 获取到了E包, 如果A想用的V3.0.0, 但引入的是V1.0.0, 这个时候就有问题了。
  5. jar包排除困难 如 : 程序猿怎么知道 A 到底依赖 的是 E的 V1.0.0, 还是V3.0.0 , 需要花费程序猿大量精力
  6. 版本回退麻烦, 效率低下 如: Spring5.2.9 想回退到 Spring5.2.7版本

总结: 传统引入jar包的方式, 会存在很多问题, 而且还会令人抓狂, 不知所措, 浪费宝贵的时间, 加班加点, 加速秃头,损害身体健康, 影响家庭和睦, 加大企业成本投入, 影响社会稳定发展。

Maven解决的问题

  1. 不需要到网络上找jar包, 减少寻找时间

  2. 引入一个Jar包, 会将它所依赖的Jar包都下载到本地, 解决了缺少依赖 , 依赖包难以寻找的问题

  3. 易排除依赖,解决版本冲突问题, Maven提供了排除依赖的语法

  4. 版本回退容易, 只需要修改相应依赖的版本即可。

总结: 有了Maven技术,从此Jar包问题得到了有效解决, 程序猿可以专注于业务开发, 大大提高了工作效率, 而且身体渐渐好转, 加班减少, 秃头率降低, 有时间陪家人, 提高家庭幸福感,减少了企业成本投入, 促进社会稳定繁荣。

Maven基础

Apache Maven 基于JDK环境, 电脑上要有 JAVA_HOME 系统变量

IDEA默认安装Maven

编辑器使用的是 IntelliJ IEDA , JAVA开发人员大部分都使用, IDEA默认自带Maven

默认的maven文件在 IDEA中的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7ZYkYF8-1607047618680)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122145007048.png)]

IDEA自带 Maven的版本 和自己的IDEA版本有关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27eyYAtF-1607047618681)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122145605702.png)]

Maven的核心配置文件 settings.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5aEbkbBb-1607047618681)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122145138671.png)]

IDEA配置Maven, 默认以配置, 我们来看一下 File -> Settings -> Build -> Build Tools -> Maven

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QdrnW9sg-1607047618681)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122150258657.png)]

  1. Maven home directory : Maven家目录位置, 本地Maven包位置

  2. User settings file: 核心配置文件位置 , 此文件位置可修改

  3. Local repository: 本地仓库位置 此文件位置也可以修改 默认会存放在 .m2/repository 目录下

    注意: 此目录下的文件是因为本人之前已经使用过默认maven去管理项目, 所以存在相关jar包, 如果大家第一次使用, 下方是没有任何文件的.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fhnkH6yf-1607047618684)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122150806782.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CshNWzOD-1607047618685)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122150749558.png)]

创建普通Maven项目

File —> New Project ----> Maven 选中后直接点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CSRF1bs2-1607047618686)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122151614218.png)]

项目配置 , 配置后点击 Finish

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OFvcnpwY-1607047618686)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122152231813.png)]

Maven标准目录结构

传统的目录结构, 每个人可能都不一样, 每个公司也可能都不一样, 没有规范性, 熟悉了一套目录结构的人到另一个不一样的结构, 需要画时间熟悉熟悉.

为避免这种情况出现, Maven规范了项目目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yL0mnmsv-1607047618687)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122152417745.png)]

Maven对象模型 POM

POM: 全称 Project Object Model 项目对象模型. 用于进行项目配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j6pn8D4Z-1607047618688)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122152621226.png)]

Maven坐标 GAV

groupId: 公司域名反写

artifactId: 通常和项目名称保持一致

version: 项目版本 1.0.0.RELEASE 1.0.0.SNAPSHOT

总结: 这三位合起来 唯一 标识一个项目, 相当于我们每个人的身份证号

​ 这三位简称: GAV坐标

扩展: 自己平时所看到的 ALPHA Beta 这些都属于测试版本 RC表示即将发行的稳定版本

​ RELEASE / GA / Stable 都属于稳定版本

Maven依赖管理 dependencies

依赖管理帮我们解决了传统JavaWeb项目引入诸多jar包带来的种种问题. (版本更换, 依赖导入, 版本冲突, 减少查找时间, 提高工作效率)

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.supersoul</groupId>
    <artifactId>maven_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--依赖管理-->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
    </dependencies>


</project>

引入spring-webmvc, 会将此包所依赖的包都下载, 而且修改版本非常方便

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RFrU1ASG-1607047618688)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122204042893.png)]

Maven进阶

外部安装Maven环境

下载Maven安装包

下载地址: https://maven.apache.org/download.cgi

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mYiPIRaR-1607047618689)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201123165814811.png)]

Maven安装包目录介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZPOAnUC-1607047618689)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201123170020721.png)]

配置Maven环境变量

新建MAVEN_HOME 系统变量, 值为Maven的根目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mra0Be65-1607047618690)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201123173154850.png)]

点击编辑, 配置到 MAVEN_HOME根目录下方的 bin目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7tLrv5G-1607047618691)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201123173219364.png)]

仓库分类

img

中央仓库:

​ 包含了世界上几乎所有流行的开源项目模板, 依赖(jar包), 插件 有Maven团队自己维护, 服务于整个互联网.

​ 此服务器在国外, 国内程序猿下载jar包时, 龟速.

​ 仓库地址 http://repo1.maven.org/maven2

其他公共库:

​ 例如: Java.net Maven 库和 JBoss Maven 库

​ 都在国外, 速度较慢.

镜像仓库:

​ 配置镜像仓库的目的一般是出于网速考虑。 由于国内访问境外远程仓库太慢, 所以我们需要配置镜像仓库

​ 一般在 maven 的 核心配置文件 settings.xml 配置阿里云镜像, 速度快

 <mirrors>
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
</mirrors>

私服:

​ 搭建在局域网内的一个私有仓库服务器. 内部开发人员可以节省带宽和时间

​ 可以代理所有外部的远程仓库

​ 团队中的项目jar包也可以放到私服上.供其他项目使用

​ 一般使用 Nexus 来构建私服( 也称为 企业级 Maven 仓库 )

本地仓库:

​ 用来存储从远程仓库下载的插件和jar包, 主要起缓存作用

​ 可以通过Maven核心配置文件 settings.xml 配置本地仓库地址.

			1. Maven本地仓库默认地址:  ${user.home}/.m2/repository    
			2. 修改本地仓库地址: 
<localRepository>本地计算机仓库路径地址</localRepository>

仓库jar包加载顺序 , 就近原则找.

img

无私服:

​ 先从本地仓库找, 找到后就不会去远程仓库去找.

​ 如果本地仓库没有, 就从远程仓库找, 找到后,下载到本地仓库. 如果远程仓库也没有, 怎会报错.

有私服:

​ 先从本地仓库找, 找到后就不会去远程仓库去找.

​ 如果本地仓库没有, 就从私服找, 找到后,下载到本地仓库. 如果私服没有, 就去其他互联网上的远程仓库找, 找到后, 下载到私服, 下载到本地仓库.

​ 如果远程仓库也没有, 就会报错.

常用命令

mvn: clean 清理编译文件

mvn: compile 编译文件

mvn: test 测试

mvn: package 打包项目

mvn: install 将本项目以jar包的形式安装到本地仓库

mvn: deploy 将项目jar包发布到远程仓库库

生命周期

清理编译文件

clean

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zgjehwGz-1607047618693)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122212543644.png)]

默认生命周期

编译–> 测试—> 打包—> 安装—> 部署

特点: 执行后一个, 之前的所有步骤会默认执行.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQJ5FCAY-1607047618695)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122212527420.png)]

站点生命周期

基本不用, 省略

Maven 插件

Maven生命周期所有的执行动作都依赖于插件, 没有插件, 生命周期毫无意义.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQGojE79-1607047618696)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201122212640655.png)]

使用Maven骨架创建普通Java项目

骨架: 就是模板的意思

注意: 复选框打勾 Create from archetype

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqoglvOS-1607047618696)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201124111501044.png)]

创建后的目录结构-

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x70opjw7-1607047618697)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201124111628218.png)]

使用Maven骨架创建web项目

骨架: 就是模板的意思

注意: 复选框打勾 Create from archetype

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yWUtQlt5-1607047618698)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201124111801035.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JUKrnI3J-1607047618699)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201124111829813.png)]

Maven默认集成了Tomcat6

更换插件: tomcat7-maven-plugin

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <port>8080</port>
        <path>/</path>
        <uriEncoding>UTF-8</uriEncoding>
        <finalName>mobile</finalName>
        <server>tomcat7</server>
    </configuration>
</plugin>

Maven概念模型

作用: 管理构建

一层: 依赖管理

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.9.RELEASE</version>
  </dependency>
</dependencies>

一层: 插件管理 构建(相关的插件) 环境功能 项目相关

<!--本项目 生效的插件-->  
<plugins>
  <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
      <port>8080</port>
      <path>/</path>
      <uriEncoding>UTF-8</uriEncoding>
      <finalName>mobile</finalName>
      <server>tomcat7</server>
    </configuration>
  </plugin>
</plugins>

Maven依赖作用域

构建包括:

​ 编译-----> 测试 ----> 运行 —> 打包

作用域Scope编译测试运行打包例子
compile (默认作用域)YYYYspring-core
providedYYlombok
testYjunit
runtimeYYY数据库连接

Maven高级

分布式 :

​ 每一个模块都能够独立运行, 相当于一个项目 , 部署在单独的一台机子上 , 多个项目之间通过网络连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMoptq0k-1607047618700)(C:\Users\13453\AppData\Roaming\Typora\typora-user-images\image-20201124162950552.png)]

Maven父子项目依赖继承

继承的目的: 复用依赖, 减少冗余配置

父项目pom :

  1. pom的打包方式

    1. dependencyManagement 依赖容器 统一管理子项目依赖版本
    2. dependencies

子项目:

  1. parent标签 relativePath 使用的是哪个项目的pom去实现继承

    1. 子项目继承了父项目的groupId
    2. 子项目会继承父项目的 dependencies下的依赖
    3. 子项目不会继承府项目的dependencyManagement 下的依赖. 如果想使用依赖容器中的依赖, 不需要写版本号

Maven多模块项目

很多也称为 Maven聚合项目

作用: 统一对子项目进行管理

父项目中: modules 去管理子项目

Jar包和War包的

jar:即Java Archive,Java的包,Java编译好之后生成class文件,但如果直接发布这些class文件的话会很不方便,所以就把许多的class文件打包成一个jar,jar中除了class文件还可以包括一些资源和配置文件,通常一个jar包就是一个java程序或者一个java库。

war:Web application Archive,与jar基本相同,但它通常表示这是一个Java的Web应用程序的包,tomcat这种Servlet容器会认出war包并自动部署。

RELEASE 和 SNAPSHOT的区别

SNAPSHOT: 快照版本

RELEASE: 稳定发布版本

RELEASE, GA R 没有任何修饰 稳定版本

SNAPSHOT Alpha Beta

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子休。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值