Maven(mvn)基础

Maven(mvn)基础

官网:Maven – Welcome to Apache Maven

官网


传统项目管理状态分析

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

image-20230131134916422


Maven是什么

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

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

image-20230131135837761

Maven的作用

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

项目结构


下载与安装

1.下载安装

结构:

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

image-20230131144053880

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中的坐标用于描述仓库中资源的位置

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

maven坐标主要组成:

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

maven坐标的作用:

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

本地仓库配置

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

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

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

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

    • 自定义位置

      <localRepository>F:\maven\repository</localRepository>
      

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

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

          <mirrors>
              <!--配置具体的仓库下载镜像-->
            <mirror> 
                <!--此镜像的唯一标识,用来区分不同的mirror元素-->
                <id>alimaven</id> 
                <!--镜像名称-->
                <name>aliyun maven</name> 
                <!--镜像url-->
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
                <!--对哪种仓库进行镜像,简单来说就是代替哪个仓库-->
                <mirrorOf>central</mirrorOf>         
            </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

image-20230201204313897

创建Maven项目

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

坐标上面有说明

image-20230201204702428

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

image-20230201204801757

用Maven创建Java

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

image-20230201205341270

用Maven创建web应用

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

image-20230201210632062image-20230201210745161

pom中添加tomcat插件

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

<!--构建-->
<build>
    <!--设置插件-->
    <plugins>
        <!--具体的插件配置-->
        <plugin>
            <!--相关的坐标-->
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            <!--配置端口号跟路径 eg:端口号80  路径 /(空)-->
            <configuration>
            	<port>80</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

pom默认配置项说明

<!--    指定pom的模型版本-->
    <modelVersion>4.0.0</modelVersion>
<!--    打包方式,web工程打包为war Java工程打包为jar-->
    <packaging>pom</packaging>
<!--    组织id-->
    <groupId>com.example</groupId>
<!--    项目id(名称)-->
    <artifactId>springboot</artifactId>
<!--    版本号 release(完成版) ,snapshot(开发板)-->
    <version>0.0.1-SNAPSHOT</version>
<!--设置当前工程的所有依赖-->
	<dependencies>
        <!--具体的依赖  有的没有版本号version-->
        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
        </dependency>
	</dependencies>
<!--parent用于引用父工程,此处引用spring boot 即从中央服务器下载spring boot文件-->
    <parent>
        <!--这是Spring Boot的父级依赖,这样当前的项目就是Spring Boot项目了。
            spring-boot-starter-parent 是一个特殊的starter,它用来提供相关的Maven默认依赖。
            使用它之后,常用的包依赖可以省去version标签。-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


依赖管理

依赖配置

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

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

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

依赖传递

  • 依赖具有传递性

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

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

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

image-20230201221605212

可选依赖

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

  • 可选依赖指对外隐藏当前所依赖的资源————不透明
<dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <!--默认为false 当为true时,其他引用该依赖的项目将看不到该配置项-->
    <optional>true</optional>
</dependency>

排除依赖

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

  • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本————不需要
<!--该配置项下有多个配置项,属于引用的那一种-->
<dependency>
	<groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <!--排除依赖,不需要写版本号,直接排除所有的该配置-->
    <exclusions>
        <exclusion>
            <groupId></groupId>
            <artifactId></artifactId>
        </exclusion>
    </exclusions>
</dependency>

依赖范围

  • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
  • 作用范围:
    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
scope主代码测试代码打包范例
compile(默认)YYYlog4j
testYjunit
providedYYservlet-api
runtimeYjdbc
<dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <!--配置依赖的可用范围,默认compile-->
    <scope></scope>
</dependency>

依赖范围传递性(了解)

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

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

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

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

image-20230201233245750


生命周期与插件

构建项目生命周期

生命周期的一般阶段:

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

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

插件

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
  • 默认maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能
<!--构建-->
<build>
    <plugins>
        <plugin>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            <!--介绍源码插件执行在什么地方  执行-->
            <executions>
                <!--具体执行-->
                <execution>
                    <!--决定执行什么东西 比如jar 对源码打包-->
                    <goals>
                        <goal></goal>
                    </goals>
                    <!--设置执行位置(执行的生命周期过程)-->
                    <phase></phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

eg:

image-20230202175603889

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

录大大i

如果文章有用,还请鼓励一下作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值