Maven(mvn)基础

Maven(mvn)基础

文章目录

  • Maven(mvn)基础
    • 传统项目管理状态分析
    • Maven是什么
    • Maven的作用
    • 下载与安装
      • 1.下载安装
      • 2.环境变量配置
    • Maven基础概念
      • 仓库
      • 坐标
      • 本地仓库配置
      • 全局setting与用户setting
    • 第一个Maven项目(手动)
      • Maven工程目录结构
      • Maven项目构建命令(基础)
    • 第一个Maven项目(IDEA自动版)
      • 配置Maven
      • 创建Maven项目
      • 用Maven创建Java
      • 用Maven创建web应用
      • pom中添加tomcat插件
    • pom默认配置项说明
    • 依赖管理
      • 依赖配置
      • 依赖传递
      • 可选依赖
      • 排除依赖
      • 依赖范围
      • 依赖范围传递性(了解)
    • 生命周期与插件
      • 构建项目生命周期
      • 插件

官网:Maven – Welcome to Apache Maven

Maven(mvn)基础_第1张图片


传统项目管理状态分析

  1. jar包不统一,jar包不兼容
  2. 工程升级维护过程操作繁琐

Maven(mvn)基础_第2张图片


Maven是什么

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

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

Maven(mvn)基础_第3张图片

Maven的作用

  • 项目构建:提供标准的、跨平台的自动化项目构建方式
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
  • 统一开发结构:提供标准的、统一的项目结构

Maven(mvn)基础_第4张图片


下载与安装

1.下载安装

结构:

  • bin:运行项
  • boot:类加载框架
  • conf:配置内容
  • lib:Maven运行时所需要的所有Java类库

Maven(mvn)基础_第5张图片

2.环境变量配置

  • 依赖Java,需要配置JAVA_HOME
  • 设置maven自身的运行环境,需要配置MAVEN_HOME

a.环境变量:

  1. 新建系统变量,变量名:MAVEN_HOME,变量值:maven的路径
  2. 编辑path,新建项:%MAVEN_HOME%\bin

b.测试:

cmd下运行mvn,显示[INFO]项即可


Maven基础概念

仓库

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

分类:

  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源

  • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源

    • 中央仓库:Maven团队维护,存储所有资源的仓库
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

    私服的作用

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

Maven(mvn)基础_第6张图片

坐标

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

maven仓库官网:Maven Repository: Search/Browse/Explore (mvnrepository.com)

maven坐标主要组成:

  • groupId:定义maven项目隶属的组织
  • artifactId:定义maven项目名(通常是模块名称,eg:SMS)
  • version:定义当前项目版本号
  • packaging:项目的打包方式

maven坐标的作用:

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

本地仓库配置

  • maven启动后,会自动保存下载的资源到本地仓库

    • 默认位置(在xml文件中被注释部分)

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

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

    • 自定义位置

      <localRepository>F:\maven\repositorylocalRepository>
      

      当前目录为F:\maven\repository文件夹中

  • 镜像仓库配置(内部配置项顺序可颠倒)

          <mirrors>
              
            <mirror> 
                
                <id>alimavenid> 
                
                <name>aliyun mavenname> 
                
                <url>http://maven.aliyun.com/nexus/content/groups/public/url> 
                
                <mirrorOf>centralmirrorOf>         
            mirror> 
          mirrors>
    

全局setting与用户setting

  • 全局setting定义了当前计算机中Maven的公共配置
  • 用户setting定义了当前用户的配置(当前用户有用户setting时,会覆盖全局setting),就像父类与子类的区别

第一个Maven项目(手动)

Maven工程目录结构

resources内放配置文件(main中与test中的配置文件可能会冲突,所以要分开放)

左侧java 右侧web

Maven项目构建命令(基础)

  • Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分开

    mvn compile #编译
    mvn clean #清理
    mvn test #测试
    mvn package #打包
    mvn install #安装到本地仓库


第一个Maven项目(IDEA自动版)

配置Maven

settings->Build,Execution,Deployment->Build Tools->Maven

Maven(mvn)基础_第7张图片

创建Maven项目

new project->Maven->选择sdk->设置项目名称以及坐标->finash

坐标上面有说明

Maven(mvn)基础_第8张图片

  • 工程样式,其他需求可自行新建文件夹,右键文件夹选择 Mark Directory as 可自行更改文件夹样式

Maven(mvn)基础_第9张图片

用Maven创建Java

new Module->勾选Create from archetype直接输quickstart->配置名称、坐标->配置maven路径->finash

用Maven创建web应用

new Module->勾选Create from archetype直接输webapp->设置名称、坐标->设置maven路径->finash

pom中添加tomcat插件

即前端tomcat不用再自己下载源文件了,直接配置即可


<build>
    
    <plugins>
        
        <plugin>
            
            <groupId>groupId>
            <artifactId>artifactId>
            <version>version>
            
            <configuration>
            	<port>80port>
                <path>/path>
            configuration>
        plugin>
    plugins>
build>

pom默认配置项说明


    <modelVersion>4.0.0modelVersion>

    <packaging>pompackaging>

    <groupId>com.examplegroupId>

    <artifactId>springbootartifactId>

    <version>0.0.1-SNAPSHOTversion>

	<dependencies>
        
        <dependency>
            <groupId>groupId>
            <artifactId>artifactId>
        dependency>
	dependencies>

    <parent>
        
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.5.9version>
        <relativePath/> 
    parent>


依赖管理

依赖配置

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

  • 格式参照 pom默认配置项说明

  • 使用dependencies与dependency进行依赖配置

依赖传递

  • 依赖具有传递性

    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
  • 依赖传递的冲突问题

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

    注:声明优先中比较时两个资源的id不同,特殊优先中,比较的是两个id相同但版本号不同

Maven(mvn)基础_第10张图片

可选依赖

私房钱,控制别人是否能用

  • 可选依赖指对外隐藏当前所依赖的资源————不透明
<dependency>
    <groupId>groupId>
    <artifactId>artifactId>
    <version>version>
    
    <optional>trueoptional>
dependency>

排除依赖

主动权,主动断开不用, 解决冲突的常用方法

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

<dependency>
	<groupId>groupId>
    <artifactId>artifactId>
    <version>version>
    
    <exclusions>
        <exclusion>
            <groupId>groupId>
            <artifactId>artifactId>
        exclusion>
    exclusions>
dependency>

依赖范围

  • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
  • 作用范围:
    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
scope 主代码 测试代码 打包 范例
compile(默认) Y Y Y log4j
test Y junit
provided Y Y servlet-api
runtime Y jdbc

    
    
    
    
    

依赖范围传递性(了解)

即作用范围取交集即可(看上表格)

  • 带有依赖范围的资源在进行传递时,作用范围将受到影响(影响配置可见性)

左侧部分为项目二,第一行为项目一

当项目一中的某依赖类型为compile,项目二引用项目一,且将项目一配置为compile时,项目二中某项目的依赖类型依然为compile。以此类推

Maven(mvn)基础_第11张图片


生命周期与插件

构建项目生命周期

生命周期的一般阶段:

compile->test-compile->test->package->install

  • Maven构建生命周期描述的是一次构建过程经历了多少个事件
  • Maven对项目构建的生命周期划分为3套
    • clean:清理工作
    • default:核心工作,例如编译、测试、打包、部署等
    • site:产生报告,发布站点等

插件

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

<build>
    <plugins>
        <plugin>
            <groupId>groupId>
            <artifactId>artifactId>
            <version>version>
            
            <executions>
                
                <execution>
                    
                    <goals>
                        <goal>goal>
                    goals>
                    
                    <phase>phase>
                execution>
            executions>
        plugin>
    plugins>
build>

eg:

Maven(mvn)基础_第12张图片

你可能感兴趣的:(项目开发,java工具,maven,java)