Maven简介

一、安装maven

  1. 安装maven之前,需要先安装java环境

  2. 下载maven安装包

    • 下载路径 https://maven.apache.org/download.cgi
    • 目前安装的是 3.5.4 版本
  3. 解压压缩包到一个不包含中文的路径下

    • 安装路径

      D:\Program Files
      
  4. 配置环境变量

    #添加MAVEN_HONE
    MAVEN_HOME=D:\Program Files\apache-maven-3.5.4
    #追加Path路径
    %MAVEN_HOME%\bin
    
  5. 测试

    运行 mvn -v 命令,正常输出则表示安装完成

在这里插入图片描述

二、Maven工程说明

  1. maven工程约定的目录结构

在这里插入图片描述

  1. maven工具实现自动编译的原理就是按照上面的约定目录来查找的。

    约定>配置>编码

  2. 常用Maven命令

    1. 执行与构建过程相关的Maven命令时,必须进入到pml.xml所在的目录下。

    2. 与构建相关的命令包括:编译、测试、打包…

    3. 常用命令

      • mvn clean: 清理
      • mvn compile: 编译主程序
      • mvn test-compile: 编译测试程序
      • mvn test: 执行测试程序
      • mvn package: 打包
      • mvn install: 安装
      • mvn site:生成站点
    4. 测试mvn compile命令

      在这里插入图片描述

      maven的核心程序中仅仅定义了抽象的生命周期,具体的工作需要由对应的插件完成。而插件不包含在核心程序中。

      当每次执行maven命令时,maven核心程序会去本地仓库中查找,如果没有就会去中心仓库下载。

      maven的默认仓库地址在 “%USERPROFILE%.m2\repository” 下面。

  3. 修改本地仓库地址

    找到解压目录下的配置文件 根据安装目录查找 我的安装目录是 D:\Program Files\apache-maven-3.5.4\conf\settings.xml

    修改配置内容

    <localRepository>E:\maven-repository</localRepository>
    
  4. 执行构建命令会在项目根目录下创建一个target目录

    在这里插入图片描述

  5. 构建过程的各个环节

    • 清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
    • 编译:将java源程序编译成class字节码文件
    • 测试:自动测试,自动调用junit程序。该步骤可以跳过 -Dmaven.test.skip=true
    • 报告:测试程序执行的结果
    • 打包:动态Web工程打war包,Java工程打jar包
    • 安装:Maven特定的概念—将打包得到的文件复制到“仓库”中的指定位置。
    • 部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可运行

pom.xml文件

  1. 含义

    POM:Project Object Model 项目对象模型

    类似于 DOM:Document Object Model 文档对象模型

  2. pom.xml

    pom.xml文件就是Maven工程的核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。

  3. pom坐标

    数学中的坐标:

    • 在二维平面中,使用x、Y两个向量可以定位二维平面中任意一个点。
    • 在三维平面中,使用X、Y、Z三个向量可以定位三维空间中任意一个点。

    maven中的坐标

    ​ 使用下面三个向量在仓库中唯一定位一个Maven工程

    • groupId

      #一般使用公司或组织域名倒序+项目名
      <groupId>junit</groupId>
      <groupId>org.springframework.boot</groupId>
      
    • artifactId

      #使用模块名称
      <artifactId>junit</artifactId>
      <artifactId>spring-boot-starter-web</artifactId>
      
    • version

      #版本号
      <version>4.12</version>
      <version>2.1.6.RELEASE</version>
      
  4. 依赖定位和仓库的关系

    如下列依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.6.RELEASE</version>
    </dependency>
    

    它的仓库路径为

    org/springframework/boot/spring-boot-starter-web/2.1.6.RELEASE/spring-boot-starter-web-2.1.6.RELEASE.jar
    
  5. 仓库分类

    ​ 本地仓库

    ​ 当前电脑上的仓库,为当前电脑上所有Maven工程服务。

    远程仓库

    • 私服:搭建在局域网,为局域网内的所有Maven工程服务。

      在这里插入图片描述

    • 中央仓库:架设在公网上,为全世界所有maven工程服务。

    • 中央仓库镜像:为了分担中央仓库的压力,在不同地址搭建中央仓库的镜像,提升用户访问速度。

  6. 仓库中保存的内容

    • Maven自身所需要的插件
    • 第三方jar包
    • 自己开发的Maven工程
  7. 依赖

    依赖范围 默认compile

    • test范围

      #test范围 
      #在main目录下的包中不能引用
      #不参与打包
      <scope>test</scope>
      
    • compile范围

      #compile范围 
      #在main和test目录下的包都能引用 
      #参与打包
      <scope>compile</scope>
      
    • provided范围

      #provided范围  主要对应web应用来说的  如依赖servler-api.jar
      #在开发时需要
      #运行时由容器提供   如tomcat
      #不参与打包
      <scope>provided</scope>
      
    • runtime

      `runtime依赖在运行和测试的时候需要,但在编译的时候不需要。与compile相比,被依赖项目无需参与项目的编译。

      比如:jdbc的驱动包,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

      由于运行时需要所以runtime范围的依赖会被打包。`

    • system

      • system范围依赖与provided类似,但是你必须显式的提供一个位于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。

      img

    • import

      import 只能在pom文件的<dependencyManagement>中使用,从而引入其他的pom文件中的依赖。如继承自己公司内部的标准parent配置。

      <dependencyManagement>
          <dependencies>
              <!-- Override Spring Data release train provided by Spring Boot -->
              <dependency>
                  <groupId>org.springframework.data</groupId>
                  <artifactId>spring-data-releasetrain</artifactId>
                  <version>Fowler-SR2</version>
                  <type>pom</type>
                  <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
                 <version>2.0.1.BUILD-SNAPSHOT</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
         </dependencies>
      
  8. 生命周期

    • 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行
    • Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
    • Maven核心程序为了更好的实现自动化构建,按照这样的特点执行生命周期中的各个阶段。不论现在要执行生命周期中的那个阶段,都是从这个生命周期最初的位置开始执行。
  9. 测试maven命令,查看执行过程

    • mvn compile

      在这里插入图片描述

    • mvn test

    在这里插入图片描述

    • mvn package

    在这里插入图片描述

    以上可以看出,不管执行什么命令,都是以第一个命令开始执行,到目标命令处结束。

  10. 每个阶段都由不同的插件完成,相似的目标由相同的插件完成

    在这里插入图片描述

  11. 依赖具有传递性

    如A依赖B,B依赖C,则A同时会依赖于B和C。

    只有compile范围的依赖可以传递,test和provided范围不能传递。

  12. 依赖排除

    当不需要某一个传递过来的依赖时,可以排除该依赖

    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jcl</artifactId>
        </exclusion>
    </exclusions>
    
  13. 依赖原则

    路径最短者优先原则

    列如A项目依赖于B,B项目依赖于C项目,同时B依赖于D的1.0.1版本,C依赖于D的1.0.2版本,按照最短路径优先原则,A将依赖于D的1.0.1版本。A->B->D(1.0.1)的路径为2,A->B->C->D(1.0.2)的路径为3。

    在这里插入图片描述

    如果路径相同,则先声明者优先。

    列如A项目依赖于B和C,B依赖于D的1.0.1版本,C依赖于D的1.0.2版本,A->B->D(1.0.1)路径为2,A->C->D(1.0.2)的路径也为2,因为依赖B的声明写在前面,所以A传递依赖于D的1.0.1版本。

在这里插入图片描述

  1. 统一管理依赖

    #使用properties标签自定义一个标签
    <properties>
        <junit.version>4.12</junit.version>
    </properties>
    
    
    #在引用依赖的地方使用自定义标签
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
    
    #以后需要更换依赖的版本时,直接改自定义标签的值就可以了
    
  2. 继承关系

    使用父工程统一管理依赖版本号,在子工程中不指定版本号。

    父工程的打包方式是pom。

    <modelVersion>4.0.0</modelVersion>
    <groupId>SpringCloud-Study</groupId>
    <artifactId>SpringCloud-Study</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    

    子工程中只需要指定artifactId,不需要指定groupId,version

    <parent>
        <artifactId>SpringCloud-Study</artifactId>
        <groupId>SpringCloud-Study</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>SpringCloud-API</artifactId>
    
  3. 聚合关系

    在父工程中配置子工程的聚合关系

    <modules>
        <module>SpringCloud-API</module>
        <module>SpringCloud-Provider-Dept-8001</module>
        <module>SpringCloud-Consumer-dept-80</module>
        <module>SpringCloudEureka-7001</module>
        <module>SpringCloudEureka-7002</module>
        <module>SpringCloudEureka-7003</module>
        <module>SpringCloud-Provider-Dept-8002</module>
        <module>SpringCloud-Provider-Dept-8003</module>
        <module>SpringCloud-Consumer-dept-feign</module>
        <module>SpringCloud-Provider-Dept-Hystrix-8001</module>
        <module>SpringCloud-Provider-Dept-Hystrix-DashBoard</module>
        <module>SpringCloud-Zuul-9527</module>
        <module>SpringCloud-Config-Server-3344</module>
        <module>SpringCloud-Config-Client-3355</module>
        <module>SpringCloud-Eureka-Config-7001</module>
        <module>SpringCloud-Config-Provider-Dept-8001</module>
    </modules>
    

    在父工程中执行打包命令 mvn package,会把所有子工程也打包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Maven的工作原理是基于POM文件的。POM文件是Maven项目中的核心配置文件,以xml格式存在于项目的根目录下。POM文件定义了项目的基本信息,包括项目的依赖项、插件、构建和部署等。Maven通过读取POM文件,根据其中的配置信息来管理项目的构建过程。当执行Maven命令时,Maven会按照POM文件中定义的依赖关系和构建生命周期来自动下载所需的依赖项,并按照预定义的构建阶段和目标执行相应的操作,例如编译、测试、打包等。这样,Maven可以帮助开发人员自动化完成项目的构建和部署过程,提高开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Maven - 工作原理](https://blog.csdn.net/weixin_43031412/article/details/91891062)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Maven简介](https://blog.csdn.net/cezongji4574/article/details/100962627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值