Maven的系统复盘(一)

发布于 2021-11-09  6.9k 次阅读


一,Maven的概述

一,传统的项目管理

一,传统开发的阶段

一个项目需要经过的流程:

  1. 需求分析:分析项目具体完成的功能,有声明要求,具体怎么实现
  2. 设计阶段(架构阶段):根据需要的结果,设计项目使用什么技术,需要解决什么难点
  3. 项目构建阶段:对项目的综合环境进行搭建,解决依赖问题
  4. 开发阶段:编码实现功能,编译代码,本地测试
  5. 测试阶段:专门的测试人员,测试整个项目的功能是否十分符合设计的要求,并出一个测试报告
  6. 项目打包发布阶段:将项目运行到生产环境中
  7. 后期运维

Maven可以简化从项目构建到项目打包发布中的操作

Mavem在整个过程中的作用:

  • 项目自动化构建,帮助开发人员做项目代码的编译,测试,打包,安装,部署等工作
  • 管理依赖,管理项目中的各种依赖jar包

注:依赖就是项目中需要使用的其他资源,常见的是jar,比如项目中使用mysql驱动,我们就说项目依赖mysql驱动

二,传统项目构建方式

传统项目构建项目的步骤:

  • 从网络上下载相应的依赖jar包
  • 把jar包导入到项目中
  • 手动解决jar依赖问题,如:版本不兼容,版本过低……

注:依赖问题有很多,比如a.jar依赖b.jar,b.jar依赖c.jar,那么安装a时需要先安装b,安装b时需要安装c,类似与Linux的RPM包管理一样,但除了这些还有版本不兼容,版本过低,版本过高等问题

传统方式项目构建的弊端:

  • Jar需要手动下载,没有同一的下载工具,在网上找jar包就要找半天
  • Jar包不统一,兼容问题,手动解决很麻烦
  • 后期项目升级维护还要重写更新jar,这个过程很繁琐
  • 项目越大,传统方式构建花费时间成本越高

二,Maven的介绍

  1. Maven是Apache的开源项目,使用java语言编写,所以在安装Maven时需要先安装java环境
  2. Maven是目前最流行的自动化项目构建工具,对于生产环境下多框架,多模块的整合开发有着重要作用,是一款在大型项目开发过程中不可或缺的重要工具
  3. Maven开源处理整合多个项目之间的引用依赖关系,可以根据业务和分层的需要任意拆分项目,也可以把jar依赖的其他jar包进行自动下载并引入项目
  4. Maven本质上是一个项目管理工具,它将项目开发和管理的过程抽象成一个项目对象模型(POM)

POM(Project Object Modle):项目对象模型

Maven的作用:

  • 依赖下载:Maven有一个统一的中央仓库,基本上项目开发中的各种依赖包都有
  • 项目构建:它提供了标准的,跨平台的自动化项目构建方式
  • 依赖管理:发布快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
  • 统一开发结构:提供标准的,统一的项目结构

Maven构建的各个环节:

  • 清理(clean):删除项目以前的编译结果,为重新编译做准备
  • 编译(compile):将java源程序编译成字节码
  • 测试(test):针对项目中的关键点进行测试,确保项目在迭代开发过程中的正确性
  • 报告(verify):在每一次测试后以标准的格式记录和展示测试结果
  • 打包(backage): 将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署,java文件用于jar包,动态web工程打war包
  • 安装(install): Maven特定的概念—将打包得到的文件复制到”仓库中’的指定位置
  • 部署(deploy): 将动态web工程生成的war包复制到servlet容器的指定目录下,使其可以运行

三,Maven的基础概念

一,Maven仓库的概念和配置

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

Maven仓库的分类:

1,本地仓库:本地存储资源的仓库,提供连接远程仓库获取资源

2,远程仓库:远程存储资源的仓库,它分为两类

  • 中央仓库:这个仓库是官方提供并维护,存储所有资源的仓库
  • 私服仓库:部门/公司范围内存储资源的仓库,从中央仓库获取资源

私服仓库的作用:

  • 保存具有版权的资源,包含购买或自主研发的jar(中央仓库中存储的jar资源都是开源的,不能存储具有版权的资源)
  • 一定范围内共享资源,仅对内部开放,不对外共享

Maven中央仓库的web域名:https://mvnrepository.com/

二,Maven坐标

坐标:用于描述仓库中资源的位置

maven坐标的主要组成:

  • groupId:定义当前Maven项目隶属组织名称(通常是域名的反写,例如:org.spring)
  • artifactId:定义当前Maven项目的名称(通常是模块名称,例如:CRM,SMS)
  • version:定义当前的版本号
  • packaging:定义该项目的打包方式

maven的作用:使用唯一标识,唯一性定位资源位置

例如:spriing-context的坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.11</version>
</dependency>

二,Maven的下载安装配置

一,Maven的下载安装

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

前置条件:在Maven前需要先安装JDK环境,不然Maven使用会报错

二,Windowns安装Maven

① 下载Maven安装包

② 解压

③ 配置Maven环境变量

1,添加一个MAVEN_HOME变量,值为maven的路径

MAVEN_HOME=D:\Maven\apache-maven-3.8.1

2,在PATH变量中添加
%MAVEN_HOME%\bin

④ 测试是否安装成功

命令:mvn -version

三,linux安装Maven

和windowns的安装步骤是一样的

① 下载Maven安装包

② 解压

命令:tar -zxvf apache-maven-3.8.3-bin.tar.gz

③ 配置环境变量

#添加以下配置
export MAVEN_HOME=/home/apache-maven-3.8.3-bin.tar.gz
export PATH=$PATH:$MAVEN_HOME/bin

④ 测试是否安装成功

命令:mvn -version

四,Maven仓库的配置

一,Maven的安装目录结构

  • bin:启动文件目录
  • conf:配置文件目录
  • lib:存放maven运行需要的包
  • ……

Maven的核心配置文件是conf目录中的settings.xml文件

二,Maven仓库的配置

Maven的配置都在settings.xml配置文件中

一,本地仓库的配置

本地仓库的配置主要配置本地仓库的保存路径

默认仓库的配置位置:

<localRepository>${user.home}/.m2/repository</localRepository>

自定义位置:

<localRepository>D:\maven\maven-repository</localRepository>

二,配置镜像仓库

maven中央仓库在国外,如果大规模访问会很卡,这时可以配置镜像仓库

maven默认路径的仓库:

<repositories>
   <repository>
     <id>central</id>
     <name>Central Repository</name>
     <url>http://repo.maven.apache.org/maven2</url>
     <layout>default</layout>
     <snapshots>
       <enabled>false</enabled>
       </snapshots>
   </repository>
 </repositories>

配置阿里云镜像仓库:

<mirrors>
<mirror>
        <!--此镜像的唯一标识,主要用来区别不同的mirror元素-->
      <id>nexus-aliyun</id>
        <!--对那种仓库进行镜像,简单的来说就是替代那个仓库(这里替代中央仓库)-->
      <mirrorOf>central</mirrorOf>
        <!--镜像的名称-->
      <name>Nexus aliyun</name>
        <!--镜像的url位置-->
      <url>http://maven.aliyun.com/nexus/cotent/groups/public</url>
      <blocked>true</blocked>
    </mirror>
  </mirrors>

三,Maven构建项目的简单描述

一,Maven的项目结构

一,创建普通java项目的目录结构

-java:项目根路径
  -src:项目文件目录
  -lib:项目依赖jar包目录

二,创建Maven项目的目录结构

-maven:maven项目根路径
   -src:maven项目文件目录
     -main:java主目录     
        -java:java文件目录
        -resource:静态资源目录,如:xml,properties,html,css,js,png等资源目录
   -test:测试目录
     -java:测试java文件目录
   -target:编译后的文件保存目录(这个文件目录只有在第一次编译后才会产生)
   -lib:项目依赖
   -pom.xml:maven核心配置文件,通过这个文件进行项目依赖导入,插件控制等

二,Pom文件的结构

pom.xml文件是Maven的核心,通过pom文件构建项目模型进行系统管理

pom文件的几大组成部分:

  • 头文件和根标签
  • 当前项目声明
  • 依赖管理
  • 插件管理

1,头文件和根标签(固定写法)

<!--头文件-->
<?xml version="1.0" encoding="UTF-8"?>
<!--project根标签,xmlns是名称空间,也是固定的-->
<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">
</project>

2,当前项目声明(主要用来描述当前项目)

<!--当前model的版本,这个一般不用管-->
    <modelVersion>4.0.0</modelVersion>
    <!--当前项目隶属组织名称-->
    <groupId>org.example</groupId>
    <!--当前项目的名称-->
    <artifactId>SpringBoot-dome</artifactId>
    <!--当前项目的版本,-SNAPSHOT为快照版本-->
    <version>1.0-SNAPSHOT</version>

3,依赖管理

<!--依赖管理标签,标签下面可以声明N个具体依赖-->
<dependencies>
    <!--具体依赖标签,里面就是坐标-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.0</version>
    </dependency>

  <!--具体依赖标签-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.0</version>
    </dependency>
</dependencies>

4,插件管理

<!--构建-->
<build>
    <!--插件管理标签,下面可以添加N个具体插件-->
    <plugins>
        <!--具体插件,内部就是插件的坐标-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.5.0</version>
        </plugin>
    </plugins>
</build>

例:

<?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>org.example</groupId>
    <artifactId>SpringBoot-dome</artifactId>
    <version>1.0-SNAPSHOT</version>


<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

</dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

路漫漫其修远兮,吾将上下而求索