• MAVEN学习笔记


    1.为什么需要学习Maven?

    :::info
    ①为了帮助我们管理 项目中的Jar包,如果要在项目中使用第三方包,那么就需要去下载jar包,再将jar包添加到当前项目的目录中,再去将jar包选择添加为当前项目的依赖
    :::
    :::danger
    该方式的弊端:
    1.寻找jar包: 官网网站提供的地址进行下载 -> 相对比较麻烦
    解决: -> 提供一个中央的下载方式,所有第三方的jar都可以在该路径中下载

            2.下载完成后需要在当前项目路径中创建目录,再添加到项目依赖中
                    -> 1.当创建的项目较多时,每个项目中都有存放依赖的目录 会导致项目的文件过大,依赖会重复保存
                    -> 2.当项目发送给其他开发者使用时,需要手动添加 jar 包到项目路径中 比较麻烦
    
                  解决方式: -> 提供一个本地当前开发环境(WIN)的仓库,所有的项目jar包,都可以通过某种方式直接使用该仓库中所有jar包
                                可以达到多个项目共享同一个 jar包
                          -> 可以提供一个 jar包 的识别路径,包括jar包的名称 版本 等信息 可以自动去外部的中央仓库进行下载
                                 下载到本地当前开发环境(WIN)的仓库中 实现自动下载
                          -> 该方式可以和IDEA进行互通,作为IDEA中的一个插件,当项目打开后,该插件根据给定的jar包信息,自动进行识别
                                 从本地开发环境中进行寻找(WIN),如果寻找不到,那么自动下载,寻找到,那么添加到当前IDEA中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    :::
    :::info
    ② 当一个大项目中包含有多个小项目,那么每个项目之间的Jar包管理,可能会存在有冲突问题
    冲突问题:
    当A子项目使用的Mysql版本是 5.1.49版本,但是在B子项目中使用的Mysql版本 8.1.12版本
    可能两个版本的Jar包中对于Driver类路径不一样,那么后续代码运行过程中,对于的类加载不到
    需要将多个版本进行统一
    :::
    上述问题: MAVEN都可以解决

    2.依赖管理

    jar之间的依赖关系,jar包管理问题统称为依赖管理
    比如:对于Mysql来说,其内部也使用了其他的第三方Jar包 根据当前import关键字从其他jar包中获取所需要的类
    
    • 1
    • 2

    3.Maven安装及配置

    下载:

    Maven – Download Apache Maven
    下载时避免选择最新版本,Maven版本已提供教学安装包 apache-maven-3.5.2.zip

    配置:

    Maven配置
    • 解压 apache-maven-3.5.2.zip 之后跳转目录层级,如下图所示:

    image.png

    • 配置远程仓库镜像

      在conf/settings目录中的mirrors标签中配置阿里云镜像仓库:

    <mirror>
      <id>aliyunmavenid>
      <mirrorOf>*mirrorOf>
      <name>阿里云公共仓库name>
      <url>https://maven.aliyun.com/repository/publicurl>
    mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 配置本地仓库

    本地仓库路径根据自己当前路径配置

    <localRepository>D:\software\apache-maven-3.5.2\repolocalRepository>
    
    • 1
    • 配置环境变量

    在当前系统环境变量中新建系统变量环境遍历名称及路径.png

    • 配置Path路径

    Path路径.png

    • 测试

    image.png

    idea配置

    :::info
    1.项目配置: 只在当前项目中有效 file -> settings
    2.默认配置: 在所有当前idea创建的项目中,都使用该配置作为其默认配置
    :::

    默认配置步骤:
    • 在Idea的欢迎页面选择:

    image.png

    • 配置IDEA中的Maven设置

    image.png

    创建Maven项目

    点击创建新项目,参数选择如下:

    创建Maven项目.png

    创建后,第一次使用会下载插件,需要等待一段时间

    Maven下载插件.png

    插件功能解释

    插件功能解释.png

    1. clean 清除 是将所有编译后的target目录文件进行清除
    2. compile 编译 是将项目中所有代码进行编译,生成的文件保存在target目录中,代码有错误,则编译失败,同时编译时也会下载依赖
    3. test 测试 可以对代码进行运行测试
    4. package 打包 对当前项目所有代码进行编译,将编译后的文件按照包路径保存到到以.jar结尾的文件中
    5. install 安装 将当前项目进行编译,打包,再将jar包按照一定的目录层级保存到本地仓库中
      :::warning
      注意:功能按键出错了,日志内容解释如下功能按键出错怎么查看.png
      :::
    jar包寻找路径

    在本地仓库中,jar包按照一定的规则进行保存,规则如下:
    jar包寻找路径.png

    Maven项目开发目录层级

    项目创建好后,会自动生成一些目录层级,每个目录层级中保存的文件类型不一致,所以需要按规范使用目录
    Maven项目的目录层级.png
    :::warning
    注意:其中External Libraries 中保存了当前项目所添加的第三方依赖
    :::

    Maven项目添加外部依赖

    注意:添加外部依赖需要在当前Pom文件中添加如下内容:
    其中标签只能出现一次,在该标签中,每添加一个第三方依赖就编写一个的标签内容,标签内容由依赖的坐标(GAV)组成
    坐标由g-a-v组成
    [1]groupId:公司或组织的域名倒序+当前项目名称
    [2]artifactId:当前项目的模块名称
    [3]version:当前模块的版本
    当依赖添加完成后,需要重载当前项目

    <dependencies>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>5.1.48version>
            dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Maven添加一个依赖.png

    重载项目

    重载项目的时机:
    1.当Pom文件中内容被修改需要生效时
    2.当前项目第一次打开时,如果没有自动加载依赖,那么需要重载项目,可以通过 External Libraries 查看依赖是否被加载成功
    重新加载Pom文件.png

    4.Maven依赖使用

    junit依赖及Scope范围

    
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.13version>
                <scope>testscope>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    junit依赖的作用:
    可以在给定的类中 某个方法上添加一些测试的注释 可以直接运行代码
    image.png

    • scope:
      1. 用于限定其作用范围,当给定的是Test那么其范围只能在Test类型的目录中使用该依赖
      2. compile【默认值】:在main、test、Tomcat【服务器】下均有效
      3. provided:在main、test下均有效,Tomcat【服务器】无效

    a1f25856-ac39-4900-b55e-ec3371f453d8.png

    对于当前类中如果添加了Test注释标记,那么整个类都可以直接运行,运行时所有的Test标记的方法都会被执行

    依赖继承

    在大项目中创建子项目

    创建子项目.png子项目.png

    注意:
    ①子项目可以继承父项目中的依赖,但是子项目中也可以添加对相同名称版本不同的依赖,根据就近原则,选择当前依赖最近的jar包版本
    ② 子项目之间默认是没有相互的依赖关系的,获取不到内部定义的类信息
    ③ 如果子项目之间存在由需求关系,那么可以在pom中添加其他子项目相关的依赖信息(GAV)并且添加后,需要再重载当前项目
    ④ 当前项目需要获取其他非公共项目时,需要将项目通过install安装到本地仓库中,再对当前项目添加依赖信息,再重载项目,当要添加的项目是同属一个大项目中的子项目时,此时不需要再通过install进行安装

    父子项目中依赖文件信息描述
        <parent>
            <groupId>com.shujiagroupId>
            <artifactId>MvnProartifactId>
            <version>1.0-SNAPSHOTversion>
        parent>
    
        <artifactId>nextSonMvnPro2artifactId>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在子项目中通过parent标签可以其父项目 父项目中的 groupId和version会被当前子项目所使用所以对于当前子项目的描述 只有 artifactId

      	<groupId>com.shujiagroupId>
        <artifactId>MvnProartifactId>
        <version>1.0-SNAPSHOTversion>
        <packaging>pompackaging>
        
        <modules>
            <module>NextSonMvnPro1module>
            <module>nextSonMvnPro2module>
        modules>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    父项目中包含由 GAV 和 packaging 一般情况下选择使用pom作为管理
    modules 中表示了当前父项目存在有那些子项目 其项目名称为什么

    配置参数信息

      	<properties>
            <junit.version>4.13junit.version>
            <mysql.version.pre>5.mysql.version.pre>
            <mysql.version.next>1.49mysql.version.next>
        properties>
    
        <dependencies>
            
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>${junit.version}version>
            dependency>
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>${mysql.version.pre}${mysql.version.next}version>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    properties中可以添加自定义的变量信息,其格式为<变量名>变量值
    对于添加的配置信息 可以在当前Pom中的任意位置进行调用其调用格式为${变量名}
    应用场景:
    当pom文件中所添加的依赖非常多时,那么对于其版本可能经常会更改,那么查找依赖会非常麻烦,于是可以在properties中定义版本,直接进行查看properties修改即可

  • 相关阅读:
    【C语言趣味教程】(2) 整数类型:数据类型的概念 | 原码反码与补码 | 有符号型和无符类型 | 研究 signed char 与 unsigned char 的取值范围
    【JAVA多线程】JMM,成体系聊一下JAVA线程安全问题
    Atcoder Beginner Contest 294
    【动态代理】
    IO流:字符输入流Reader的超详细用法及底层原理
    实验18:模拟温度传感器实验
    回溯--字母迷宫
    ConsoleAppender简介说明
    Kubernetes 控制平面组件:etcd
    软件评测师之RISC/CISC
  • 原文地址:https://blog.csdn.net/thosakapie/article/details/136410432