Maven笔记

本文介绍了Maven在项目管理中的重要性,包括如何解决jar包管理和依赖冲突问题,以及如何配置本地仓库、IDEA插件和依赖继承。还涵盖了Maven的安装、配置和IDEA中的设置,以及JUnit依赖和scope的使用。
摘要由CSDN通过智能技术生成

1.为什么需要学习Maven?

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

        2.下载完成后需要在当前项目路径中创建目录,再添加到项目依赖中
                -> 1.当创建的项目较多时,每个项目中都有存放依赖的目录 会导致项目的文件过大,依赖会重复保存
                -> 2.当项目发送给其他开发者使用时,需要手动添加 jar 包到项目路径中 比较麻烦

              解决方式: -> 提供一个本地当前开发环境(WIN)的仓库,所有的项目jar包,都可以通过某种方式直接使用该仓库中所有jar包
                            可以达到多个项目共享同一个 jar包
                      -> 可以提供一个 jar包 的识别路径,包括jar包的名称 版本 等信息 可以自动去外部的中央仓库进行下载
                             下载到本地当前开发环境(WIN)的仓库中 实现自动下载
                      -> 该方式可以和IDEA进行互通,作为IDEA中的一个插件,当项目打开后,该插件根据给定的jar包信息,自动进行识别
                             从本地开发环境中进行寻找(WIN),如果寻找不到,那么自动下载,寻找到,那么添加到当前IDEA中

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

2.依赖管理

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

3.Maven安装及配置

下载:

Maven – Download Apache Maven
下载时避免选择最新版本

配置:

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

image.png

  • 配置远程仓库镜像

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

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>
  • 配置本地仓库

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

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

在当前系统环境变量中新建系统变量环境遍历名称及路径.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>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>
</dependencies>

Maven添加一个依赖.png

重载项目

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

4.Maven依赖使用

junit依赖及Scope范围

<!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

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.shujia</groupId>
        <artifactId>MvnPro</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>nextSonMvnPro2</artifactId>

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

  	<groupId>com.shujia</groupId>
    <artifactId>MvnPro</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    
    <modules>
        <module>NextSonMvnPro1</module>
        <module>nextSonMvnPro2</module>
    </modules>

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

配置参数信息

  	<properties>
        <junit.version>4.13</junit.version>
        <mysql.version.pre>5.</mysql.version.pre>
        <mysql.version.next>1.49</mysql.version.next>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version.pre}${mysql.version.next}</version>
        </dependency>
    </dependencies>

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值