Maven系列第4篇:仓库详解

环境

  1. maven3.6.1

  2. 开发工具idea

  3. jdk1.8

本篇内容

  1. maven是如何找到我们依赖的jar的

  2. 什么是仓库

  3. 仓库的分类

  4. 各种类型仓库详解

  5. maven中远程仓库配置详解

  6. 关于构件版本问题说明

  7. 构件文件的布局

在maven出现之前,项目中用到第三方jar包时,我们会把这些依赖的jar包拷贝到项目的lib目录中,如果我们开发了多个项目,这些jar包在各个项目目录中都有一份拷贝,这存在的一些问题:

  1. 不方便jar包的管理,比如jar的升级、删除等操作

  2. 对磁盘空间的重复占用

主要还是不方便jar包的管理,maven很好的解决了这些问题,我们来看看maven管理依赖jar包的效果。

我来提几个问题,带着问题来看本篇内容

  1. maven是如何将依赖的jar引入项目的?

  2. maven项目中依赖的jar是从哪里获取的?

  3. 我们如何掌控这些jar的获取方式?

  4. maven是如何组织管理构件的?

先来看一下maven项目案例

创建一个maven项目,打开idea,点击File->New->Project,选择Maven,如下:

点击Next,输入项目坐标信息,如下:

点击Next,输入Project name 为maven-chat03,如下:

点击Finish,创建成功,如下:

我们看一下这个项目占用的磁盘大小:

占用 29.9KB,下面我们在pom.xml中引入fastjson的依赖:

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
</dependencies>

创建一个Demo.java,如下

package com.javacode2018;

import com.alibaba.fastjson.JSON;

public class Demo1 {
    public static void main(String[] args) {
        System.out.println(JSON.class);
    }
}

运行一下Demo1,输出:

class com.alibaba.fastjson.JSON

说明fastjson在项目中起效了,我们再来看一下项目的大小

上面一次是39kb,这次是49kb,大小增加了10KB,我们来看一下fastjson.jar的大小

这个jar包643kb,但是项目才49kb,这说明了什么?

说明了项目目录中没有包含这个jar包,只是对这个jar包做了一个引用。

如果系统中有很多项目,都采用同一个maven来引用依赖的jar包,那么这些jar只会在磁盘中存储一份,这些jar可以被其他所有的maven项目共享,项目只需要在pom.xml中通过maven坐标的方式来对这些jar进行引用,而不用再拷贝至项目中,若对jar包进行删除、升级版本直接修改pom.xml就可以了,非常方便。

结论:maven采用引用的方式将依赖的jar引入进来,不对真实的jar进行拷贝,但是打包的时候,运行需要用到的jar都会被拷贝到安装包中。

Maven寻找依赖的jar

我们可以看到,当我们项目中需要使用某些jar时,只需要将这些jar的maven坐标添加到pom.xml中就可以了,这背后maven是如何找到这些jar的呢?

maven官方为我们提供了一个站点,这个站点中存放了很多第三方常用的构建(jar、war、zip、pom等等),当我们需要使用这些构件时,只需将其坐标加入到pom.xml中,此时maven会自动将这些构建下载到本地一个目录,然后进行自动引用。

上面提到的maven站点,我们叫做maven中央仓库,本地目录叫做本地仓库。

默认情况下,当项目中引入依赖的jar包时,maven先在本地仓库检索jar,若本地仓库没有,maven再去从中央仓库寻找,然后从中央仓库中将依赖的构件下载到本地仓库,然后才可以使用,如果2个地方都没有,maven会报错。

下面我们来看看什么是仓库?

Maven 仓库

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。

在 Maven 中,仓库是一个位置,这个位置是用来存放各种第三方构件的,所有maven项目可以共享这个仓库中的构件。

Maven 仓库能帮助我们管理构件(主要是jar包),它就是放置所有jar文件(jar、war、zip、pom等等)的地方。

仓库的分类

主要分为2大类:

  1. 本地仓库

  2. 远程仓库

而远程仓库又分为:中央仓库、私服、其他公共远程仓库

当maven根据坐标寻找构件的时候,会首先查看本地仓库,如果本地仓库存在,则直接使用;如果本地不存在,maven会去远程仓库中查找,如果找到了,会将其下载到本地仓库中进行使用,如果本地和远程仓库都没有找到构件,maven会报错,构件只有在本地仓库中存在了,才能够被maven项目使用。

本地仓库

默认情况下,maven本地仓库默认地址是~/.m2/respository目录,这个默认我们也可以在~/.m2/settings.xml文件中进行修改:

<localRepository>本地仓库地址</localRepository>

当我们使用maven的时候,依赖的构件都会从远程仓库下载到本地仓库目录中。

Maven 的本地仓库,在安装 Maven 后并不会创建,当我们执行第一条 maven 命令的时候本地仓库才会创建,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值