当前位置: 首页 > news >正文

maven【maven】技术详解

Maven

  • Maven的本质是项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

  • Project Object Model:项目对象管理模型

  • 作用:

    • 项目构建:提供标准的、跨平台的自动化项目构建方式
    • 依赖管理:方便快捷的管理项目依赖的资源(jarbao),避免资源间的版本冲突问题
      在这里插入图片描述

1.下载与安装

  • 1.下载:在官网中找到对应版本的maven进行下载,解压到需要安装的目录下即完成了安装
  • 2.配置:添加环境变量:MAVEN_HOME,以及在path中添加:%MAVEN_HOME%\bin
  • 3.本地仓库配置:在maven文件下找到conf文件夹,打开里面的setting.xml

  • 5.仓库控制:
    在这里插入图片描述

2.仓库

  • 用于存储资源,包含各种jar包

在这里插入图片描述

在这里插入图片描述

3.坐标

  • 用于描述仓库中资源的位置

在这里插入图片描述

在这里插入图片描述

4.Maven工程制作

1)手动制作

1.Maven项目构建命令

在这里插入图片描述

  • 项目结构:
    在这里插入图片描述

在这里插入图片描述

5.Maven的IDEA生成

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/maven-v4_0_0.xsd"><!--指定pom的模型版本--><modelVersion>4.0.0</modelVersion><!--打包方式,web工程打包为war,java工程打包为jar--><packaging>war</packaging><!--组织id--><groupId>com.itheima</groupId><!--项目id--><artifactId>web01</artifactId><!--版本号:release,snapshot--><version>1.0-SNAPSHOT</version><!--设置当前工程的所有依赖--><dependencies><!--具体的依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies><!--构建--><build><!--设置插件--><plugins><!--具体的插件配置--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins></build></project>

6.依赖

1)依赖

  • 指当前项目运行需要用到的jar包(指别人开发的资源模块)
    在这里插入图片描述

2)依赖传递

  • 依赖具有传递性:
    • 直接依赖:在当前项目中通过配置建立的依赖关系
    • 间接依赖:被依赖的资源如果依赖其他资源,则当前项目是间接依赖其他资源的
1.依赖传递冲突
  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的资源覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,则后配置的覆盖先配置的
    在这里插入图片描述
    在这里插入图片描述
2.可选依赖
  • 可选依赖指对外隐藏当前所依赖的资源–不透明
  • 在配置资源时,添加:<optional>true<optional>

在这里插入图片描述

在project03中对外隐藏对junit资源的依赖,在project02中能看到priject03依赖的其他资源,而无法看到project03对junit的依赖
在这里插入图片描述

3.排除依赖
  • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
    在这里插入图片描述

在project02中引入project03的依赖时,不需要用到project03的log4j资源时,在project02配置project03时添加需要排除的依赖名称:这样在project02中就不会传递project03中的log4j资源
在这里插入图片描述

4.依赖范围
  • 依赖的jar默认情况都可以使用,可以通过scope标签设定作用范围
  • 作用范围:
    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
      在这里插入图片描述
依赖范围传递

在这里插入图片描述

7.生命周期与插件

1)项目构建生命周期
  • 生命周期:由项目编译到安装到maven库中的一次构建过程

  • Maven对项目构建的生命周期分为三阶段:

    • clean:
      在这里插入图片描述

    • default:
      在这里插入图片描述
      在这里插入图片描述

    • site:
      在这里插入图片描述

2)插件
  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
  • 默认maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能
    在这里插入图片描述

在project03中配置插件,插件执行的阶段为generate-test-resource,当运行test阶段时,由于test在generate-test-resource阶段后面,所以依然会执行插件的功能。
在这里插入图片描述

Maven高级

1.分模块开发与设计

  • 把一个大的项目,根据功能划分为多个小的模块
  • 模块中只包含当前模块对应的功能类与配置文件
  • spring核心配置根据模块功能不同进行独立制作
  • 当前模块所依赖的模块通过导入坐标的形式加入当前模块之后,并且安装到本地maven仓库中才可以使用
  • web.xml需要加载所有的spring核心配置文件

在这里插入图片描述

  • 1.ssm_pojo的拆分:

    • 拷贝原始项目对应的相关内容到ssm_pojo模块中
      • 实体类
      • 配置文件(无)
  • 2.ssm_dao模块的拆分:

    • 拷贝项目中dao文件下的所有内容
    • 对原始项目中其他bean的使用,比如使用到了ssm_pojo中的user类:
      • 将ssm_pojo的坐标直接导入到pom.xml文件中,将ssm_pojo作为一个资源导入到ssm_dao模块中
      • 需要将ssm_pojo安装到本地仓库中 (install)
    • 配置文件中需要使用到的依赖复制到ssm_dao的pom.xml文件
      在这里插入图片描述
  • 3.ssm_service模块的拆分:

    • 将service相关的文件从原始项目中复制下来
    • 使用到了dao中的bean,于是将ssm_dao的模块坐标导入到当前项目中:
      • 将ssm_dao的坐标直接导入到pom.xml文件中,将ssm_dao作为一个资源导入到ssm_service模块中
      • 需要将ssm_dao安装到本地仓库中 (install)
    • 配置文件中需要使用到的依赖复制到ssm_service的pom.xml文件
      在这里插入图片描述
  • 4.controller模块拆分:

  • 1.将模块设置为web-app模板
    在这里插入图片描述

2.聚合

  • 当前项目结构中,所有模块是层层嵌套的,如果中间某个模块进行了更新,其他模块如何将他们所依赖的模块同步更新?
  • 创建一个管理工程,只用作模块的管理:操作当前模块就能打包或者编译它管理的所有模块
  • 在pom.xml中添加<packaging>pom</packaging>:定义该工程用于构建管理
  • 再添加:<modules></modules>里面则放入需要管理的工程模块名称
  • 相当于管理层,里面不包含任何代码,只负责所有模块的统一更新和版本升级

在这里插入图片描述

3.继承

  • 模块依赖关系维护:多个模块依赖的资源版本可能会有冲突
  • 使用一个总的依赖版本管理:在总的管理中列举所有依赖以及统一的版本,然后各个子模块只用对应用到的模块<dependencyManagement></dependencyManagement>
  • 在子模块中,定义父工程的坐标:指定哪个是总的依赖项:<parent></parent>
  • 子模块中去掉每个依赖的版本,全部是从父工程的依赖中获取版本号,groupId也可以省略,与父工程是用一个group

在这里插入图片描述
在这里插入图片描述

4.继承与聚合的对比

  • 聚合:在父工程中可以明确知道有哪些模块
  • 继承:父工程模块无法找到哪些子模块是继承了自己,通常都是在子模块中配置父工程坐标
    在这里插入图片描述

5.属性

  • 我们定义一个自定义属性<properties></properties>来统一版本名称,统一管理依赖的版本
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

工程版本

在这里插入图片描述
在这里插入图片描述

资源配置

在这里插入图片描述

  • 在对应模块的pom.xml文件中定义对应的属性,在<build></build>中配置文件对应信息,然后使用${}获取该属性:在模块配置文件中读取核心配置中的属性值(这样就把所有配置属性集中到核心配置中管理)
    在这里插入图片描述
    在这里插入图片描述

多环境开发配置

多环境兼容

当开发和生成时需要在不同的环境下进行时,可以在pom.xml中定义多环境:
比如在开发中是在自己的服务器上运行,而生成时则是在总的服务器上运行,就可以通过多环境设置不同环境下的属性:

<!--  创建多环境--><profiles>
<!--    定义具体的环境:生成环境--><profile>
<!--      定义环境对应的唯一名称--><id>pro_env</id>
<!--      定义环境中换用的属性--><properties><jdbc.url>jdbc:mysql://120.55.43.71:3306/ssm_db</jdbc.url></properties></profile>
<!--    定义具体的环境:开发环境--><profile><id>dep_env</id><properties><jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url></properties></profile></profiles>
  • 在运行程序的打包时,就可以指定对应的环境从而完成在不同属性环境下的打包:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

跳过测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.私服

  • 在公共服务器、中央服务器与本地仓库中建立一种关系,使得多个开发人员能够访问到各自上传的资源。
    在这里插入图片描述

1.私服服务器

  • 1.安装:
    在这里插入图片描述
  • 2.运行:
    • 复制到需要安装的路径下,解压出来重命名为nexus:进入到D:\nexus\nexus-3.20.1-01\bin目录下执行cmd,输入nexus /run nexus:启动私服服务器
  • 3.访问私服服务器:
    localhost:8081

在这里插入图片描述

2.私服资源获取

  • 宿主仓库:hosted
    • 保存无法从中央仓库获取的资源
      • 自主研发
      • 第三方非开源项目
  • 代理仓库:proxy
    • 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
  • 仓库组:group
    • 将若干个仓库组成一个群众,简化配置
    • 仓库组不能保存资源,属于设计型仓库
      在这里插入图片描述

3.登录私服服务器

  • 1.创建hosted仓库:
    在这里插入图片描述

  • 2.将当前hosted仓库添加:
    在这里插入图片描述

  • 3.组件资源上传:
    在这里插入图片描述
    在这里插入图片描述

4.ideal环境的资源上传与下载

在这里插入图片描述

  • 配置本地仓库访问私服的权限:用户名+密码配置
    在这里插入图片描述

  • 配置本地仓库资源的来源:
    在这里插入图片描述

  • 也就是当需要用到资源时,从私服服务器的哪个地方下载:先是从中央仓库找,如果中央仓库找不到再从其他剩余仓库找:
    在这里插入图片描述
    在这里插入图片描述

  • 在IDEA中配置需要将对应的版本发布配置:

    <distributionManagement><repository><id>heima-release</id><url>http://localhost:8081/repository/hiema-release/</url></repository><snapshotRepository><id>heima-snapshots</id><url>http://localhost:8081/repository/heima-snapshots/</url></snapshotRepository></distributionManagement>
  • 其中:对应版本需要通过仓库url发布到对应的仓库上:
    在这里插入图片描述

  • 发布资源到私服命令:mvn deploy

在这里插入图片描述


资源发布的流程

  • 1.在IDEA中配置了对应资源发布仓库的url:
    • 如果是release的版本就会找到<repository></repository>中的url去访问该仓库地址
    • 如果是snapshot的版本就会找到 <snapshotRepository> </snapshotRepository>中的仓库url访问
  • 2.由于有权限限制,于是会根据id去本地仓库中配置的xml文件中找到对应id的<server></server>然后根据配置的用户名和密码去访问私服服务器
  • 3.将资源发布到对应的仓库里面

在这里插入图片描述

通过这样的资源发布,可以将该私服服务器挂到一个云服务器上,然后在任何地方,任何一个人都可以将自己开发好的资源发布到该私服上,而其他人也可以在任意地方访问该私服服务器,去下载同一个项目组中发布的资源,从而实现项目资源管理。

在这里插入图片描述

*注:上述内容来自黑马程序员的视频学习,仅用作学习交流,不用作商业用途,如有侵权,联系删除。

http://www.xdnf.cn/news/1437553.html

相关文章:

  • ARM编译器生成的AXF文件解析
  • 平衡车-ADC采集电池电压
  • 综合诊断板CAN时间戳稳定性测试报告8.28
  • Linux内核进程管理子系统有什么第四十回 —— 进程主结构详解(36)
  • 安装部署k3s
  • Java试题-选择题(29)
  • 算法题打卡力扣第3题:无重复字符的最长子串(mid)
  • Suno AI 新功能上线:照片也能唱歌啦!
  • Netty从0到1系列之NIO
  • 进程优先级(Process Priority)
  • 猫猫狐狐的“你今天有点怪怪的”侦察日记
  • CentOS7安装Nginx服务——为你的网站配置https协议和自定义服务端口
  • Java注解深度解析:从@ResponseStatus看注解奥秘
  • 大模型RAG项目实战:Pinecone向量数据库代码实践
  • 二叉树经典题目详解(下)
  • 【数据分享】31 省、342 个地级市、2532 个区县农业机械总动力面板数据(2000 - 2020)
  • MySQL数据库——概述及最基本的使用
  • Python实现浅拷贝的常用策略
  • Vite 插件 @vitejs/plugin-legacy 深度解析:旧浏览器兼容指南
  • 【Linux】信号量
  • 09.01总结
  • LeetCode算法日记 - Day 30: K 个一组翻转链表、两数之和
  • 基于Springboot和Vue的前后端分离项目
  • playwright+python UI自动化测试中实现图片颜色和像素对比
  • milvus使用
  • Hard Disk Sentinel:全面监控硬盘和SSD的健康与性能
  • Python学习-day4
  • 2026届长亭科技秋招正式开始
  • 算法 --- 模拟
  • NLP学习系列 | Transformer代码简单实现