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.pswp.cn/bicheng/95932.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统-Day 25】死锁 (Deadlock):揭秘多线程编程的“终极杀手”

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

【嵌入式C语言】七

8.4函数的声明和定义声明一个函数意味着向编译器描述函数名、返回值、参数个数和类型&#xff0c;但并不会为函数分配存储空间定义一个函数意味着在声明变量的同时还要有具体的实现&#xff0c;并且会为函数分配存储空间8.5多源文件的函数声明和定义8.6预处理指令#Include#incl…

hardhat3 源神 -- 启动!

Hardhat 项目开发环境搭建完整指南 1. 从 GitHub 下载项目 # 使用 SSH 方式克隆&#xff08;需要配置 SSH key&#xff09; git clone gitgithub.com:NomicFoundation/hardhat.git# 或使用 HTTPS 方式 git clone https://github.com/NomicFoundation/hardhat.git# 进入项目目录…

遇到 Git 提示大文件无法上传确实让人头疼

遇到 Git 提示大文件无法上传确实让人头疼&#xff0c;但别担心&#xff0c;我们可以一步步来解决。为了让你更清晰地了解整个流程&#xff0c;我先用一个表格来概括主要步骤&#xff1a;步骤核心操作关键命令/工具示例 (用于删除历史中的大文件)1. 定位大文件使用 Git 命令或工…

机器人控制器开发(传感器层——奥比大白相机适配)

编译OrbbecSDK_ROS2的代码 执行命令 colcon buildros2 launch orbbec_camera dabai.launch.py问题1&#xff1a; 运行时报错&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not load library…

C语言(长期更新)第15讲 指针详解(五):习题实战

C语言&#xff08;长期更新&#xff09;第15讲 指针详解&#xff08;五&#xff09;&#xff1a;习题实战 跟着潼心走&#xff0c;轻松拿捏C语言&#xff0c;困惑通通走&#xff0c;一去不回头~欢迎开始今天的学习内容&#xff0c;你的支持就是博主最大的动力。博主主页&#…

数据仓库概要

什么是数据仓库&#xff1f; 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 核心特征 1. 面向主题 数据仓库围绕核心业务主题&#xff08;如客户、产品、销售、财务&#xff09;来组织数据&#xff0c;而不是围绕具体的…

python库 Py2exe 的详细使用(将 Python 脚本变为Windows独立软件包)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、Py2exe 概述 1.1 Py2exe介绍 1.2 Py2exe安装 1.3 替代工具推荐 二、基础使用 2.1 编写打包脚本 2.2 执行打包命令 2.3 完整案例 2.4 配置选项详解 2.5 构建和分发 三、高级配置 3.1 包含隐藏导入 3.2 处理特殊包…

CuTe C++ 简介02,gemm_device cuda kernel 的实现

《CuTe C 简介01&#xff0c;从示例开始 》 中&#xff0c;最后看到了 计算 gemm 的cuda kernel&#xff0c;使用 NVIDIA CUTLASS 的 CUTe (CUDA Tile) 库实现的高性能 GEMM (通用矩阵乘法) CUDA kernel。接下来解释一下这个内核的各个部分。文末再贴一遍代码&#xff0c;方便查…

万代《宝可梦》主题新品扭蛋公开!史上最大尺寸

使用jQuery的常用方法与返回值分析 jQuery是一个轻量级的JavaScript库&#xff0c;旨在简化HTML文档遍历和操作、事件处理以及动画效果的创建。本文将介绍一些常用的jQuery方法及其返回值&#xff0c;帮助开发者更好地理解和运用这一强大的库。 1. 选择器方法 jQuery提供了多种…

【FastDDS】Layer Transport ( 05-Shared Memory Transport)

6.4 共享内存传输 共享内存&#xff08;SHM&#xff09;传输依靠主机操作系统提供的共享内存机制&#xff0c;实现了在同一处理单元/机器上运行的实体之间的快速通信。注意 Fast DDS 利用域参与者&#xff08;DomainParticipant&#xff09;的 GuidPrefix_t 来识别在同一主机上…

记 2025/9/6

人工智能常见的模型按照处理问题分为6大类&#xff1a;处理权重问题的权重模型、处理状态问题的状态模型、处理序列问题的问题模型、处理表示问题的表示模型、处理相似度的相似模型、处理分类问题的分类模型。权重是计算特定状态下事物的重要性。状态问题是刻画权重动态变化的过…

开启Python之路,第一节学习大纲-从入门到进阶

前端开启Python之路&#xff0c;前端有没有必要卷后端技术&#xff0c;欢迎各位大神批评指正 第一阶段&#xff1a;基础入门 (打好根基) 目标&#xff1a; 理解编程基本概念&#xff0c;掌握 Python 核心语法&#xff0c;能编写简单的脚本程序。 1、环境搭建与开发工具 安装 Py…

webshell及冰蝎双击无法打开?

什么是webshell&#xff1f; web:万维网 shell&#xff1a;是指一种应用程序&#xff0c;为用户和系统之间建立连接&#xff0c;通过这个界面访问操作系统内核的服务 webshell:是以asp、aspx、php、jsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做…

【星闪】Hi2821 | PWM脉宽调制模块 + 呼吸灯例程

1. 简介PWM&#xff08;Pulse Width Modulation&#xff09;&#xff0c;全称脉宽调制&#xff0c;通过对一系列脉冲的宽度进行调制&#xff0c;等效出所需波形。即对模拟信号电平进行数字编码&#xff0c;通过调节频率、占空比的变化来调节信号的变化。一个 PWM 周期内由一段高…

51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)

一、串行通信与并行通信1、串行通信定义&#xff1a;数据一位一位地按顺序通过单条传输线进行传输的通信方式。优点&#xff1a;传输线少&#xff0c;成本低&#xff0c;适合长距离传输缺点&#xff1a;传输速度相对较慢2、并行通信定义&#xff1a;数据的各位同时通过多条并行…

SpringBoot后端开发常用工具详细介绍——SpringSecurity认证用户保证安全

简单的开始 创建SpringBoot项目 首先创建一个简单的springboot项目&#xff0c;假设端口为8888&#xff0c;添加controller控制层&#xff0c;并在其中添加TestController控制类&#xff0c;那么启动springboot项目之后&#xff0c;访localhost:8888/api/message页面会显示my…

别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!

你是否受够了这些&#xff1f; 刚调通OpenAI的API&#xff0c;老板说“咱们试试国产模型降本增效”&#xff0c;你看着满屏的if-else只想说“我晕”。想给AI加上“查天气”、“执行代码”的能力&#xff0c;却发现Function Calling的代码复杂得让人头皮发麻。本地的Agentdemo惊…

window使用ffmep工具,加自定义脚本执行视频转码成h264(运营人员使用)

技术文章大纲&#xff1a;ffmep配合脚本使用1. 需要提供脚本给视频转码的给运营,给运营上传视频使用安装ffmep windows版本(目前我使用的就是windows)将脚本里面的执行路径修改成自己的电脑安装ffmep/bin/ffmep.exe路径处理好之后就点击执行2.环境准备ffmep windows版解压到一个…

Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分

原题链接&#xff1a; Leetcode 240. 搜索二维矩阵 II 解法一&#xff1a;排除法 参考 【图解】排除法&#xff0c;一图秒懂&#xff01;&#xff08;Python/Java/C/C/Go/JS/Rust&#xff09; 从右上角&#xff1a; class Solution { public:bool searchMatrix(vector<vec…