• 小黑子—Maven基础


    一 小黑子的Maven学习

    1. Mavn的介绍

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

    • POM(Project Object Model)︰项目对象模型
      在这里插入图片描述

    • 项目构建:提供标准的、跨平台的自动话项目构建

    • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题

    • 统一开发结构:提供标准的、统一的项目结构
      在这里插入图片描述

    2. Maven基础概念

    2.1 仓库

    • 仓库:用户存储资源,包含各种jar包
    • 仓库分类:
      • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
      • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
        • 中央仓库:Maven团队维护,存储所有资源的仓库
        • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

    私服的作用:

    • 保存具有版权的资源,包含购买或自主研发的jar 中央仓库中的jar都是开源的,不能存储具有版权的资源
    • 一定范围内共享资源,仅对内部开放,不对外共享
      在这里插入图片描述

    2.2 坐标

    mvn查找网站

    什么是坐标?

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

    Maven坐标主要组成

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

    Maven坐标的作用

    • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

    2.3 仓库配置

    本地仓库配置

    • Maven启动后,会自动保存下载的资源到本地仓库
      • 默认位置
    <localRepository>${user.home}/.m2/repositorylocalRepository>
    
    • 1

    当前目录位置为登录用户名所在目录下的.m2文件夹中

    • 自定义位置
    <localRepository>D: \maven\repositorylocalRepository>
    
    • 1

    当前目录位置为D:\maven\repository文件夹中

    远程仓库配置

    • Maven默认连接的仓库配置
    <repositories>
    	<repository>
    		<id>centralid>
    		<name>Central Repositoryname>
    		<ur1>https://repo.maven.apache.org/maven2ur1>
    		<layout>defaultlayout>
    		<snapshots>
    			<enabled>falseenabled>
    		snapshots>
    	repository>
    repositories>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    镜像仓库配置

    • 在setting文件中配置阿里云镜像仓库
    <mirrors>
    	
    	<mirror>
    		
    		<id>nexus-aliyunid>
    		
    		<mirrorof>centralmirrorOf>
    		
    		<name>Nexus aliyunname>
    		
    		<ur1>http: //maven.aliyun. com/nexus/content/groups/publicurl>
    	mirror>
    mirrors>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    全局setting与用户setting区别

    • 全局settting定义了当前计算器中Maven的公共配置
    • 用户settting定义了当前用户的配置

    3. 手动写一个maven项目

    Maven工程目录结构
    在这里插入图片描述

    • 在src同层目录下创建pom.xml
      在这里插入图片描述

    3.1 Maven项目构建命令

    • Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
    mvn compile			# 编译
    mvn clean			# 清理
    mvn	test			# 测试
    mvn package			# 打包
    mvn	install			# 安装到本地仓库
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2 插件创建工程

    • 创建工程
    mvn archetype:generate
    -DgroupId={project-packaging}
    -DartifactId={project-name }
    -DarchetypeArtifactId=maven-archetype-quickstart
    -DinteractiveMode=false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 创建java工程
    mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-project -
    DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0 .0.1-snapshot -
    DinteractiveMode=false
    
    • 1
    • 2
    • 3
    • 创建web工程
    mvn archetype: generate -DgroupId=com.itheima -DartifactId=web-project -
    DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -
    DinteractiveMode=false
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    4. IDEA下的maven项目

    IDEA编译环境下的maven学习视频

    5. 依赖管理

    5.1 依赖配置

    依赖指当前运行所需要的jar,一个项目可以设置多个依赖

    格式:

    
    <dependencies>
    	
    	<dependency>
    		
    		<groupId>junitgroupId>
    		
    		<artifactId>junitartifactId>
    		
    		<version>4.12version>
    	dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5.2 依赖传递

    依赖具有传递性

    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
      在这里插入图片描述

    依赖传递中的冲突问题

    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
      在这里插入图片描述

    5.3 可选依赖(不透明)

    可选依赖指对外隐藏当前所依赖的资源―—不透明

    <dependency>
    	<groupId>junitgroupId>
    	<artifactId>junitartifactid>
    	<version>4.12version>
    	<optional>trueoptional>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.4 排除依赖(不需要)

    排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要

    <dependency>
    	<groupId>junitgroupId>
    	<artifactId>junitartifactid>
    	<version>4.12version>
    	<exclusions>
    		<exclusion>
    			<groupId>org.hamcrestgroupId>
    			<artifactId>hamcrest-coreartifactId>
    		exclusion>
    	exclusions>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.5 依赖范围

    依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

    作用范围

    • 主程序范围有效 (main文件夹范围内)
    • 测试程序范围有效 (test文件夹范围内)
    • 是否参与打包 (package指令范围内)
    scope主代码测试代码打包范例
    compile(默认)YYYlog4j
    testYjunit
    providedYYservlet-api
    runtimeYjdbc

    依赖范围传递性

    • 带有以来范围的资源在进行传递时,作用范围将受到影响
      在这里插入图片描述

    6. 生命周期与插件

    6.1 构建生命周期

    • Maven构建生命周期描述的是一次构建过程经历经历了多少个事件
      在这里插入图片描述

    • Maven对项目构建的生命周期划分为3套

      • clean:清理工作
        在这里插入图片描述

      • default:核心工作,例如编译,测试,打包,部署等
        在这里插入图片描述

      • site:产生报告,发布站点等
        在这里插入图片描述

    6.2 插件

    • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
    • 默认maven在各个生命周期上绑定有预设的功能
    • 通过插件可以自定义其他功能
      在这里插入图片描述
  • 相关阅读:
    2023年中职“网络安全“—JavaScript安全绕过
    Python之第十章 IO及对象列化
    STM32H5开发(7)----LCD显示TOF检测数据
    js中获取json的值:使用 JSON.parse() 方法
    3.SpringEL方法调用实例
    Docker:Gitlab 安装
    Linux之xdotool工具安装及实践
    Python无废话-办公自动化Excel写入操作
    C. Salyg1n and the MEX Game Codeforces Round 897 (Div. 2)
    MYSQL安装及卸载
  • 原文地址:https://blog.csdn.net/VanWot/article/details/133894286