Maven 仓库

1.什么是maven仓库

1)maven世界中,任何一个项目的依赖、插件、或者项目输出,都可以称之为构件,每个构件都有唯一坐标供mave。

2)每一个工作站上可能有几个或者十几个或者更多的maven项目,这些maven项目可能都依赖一些相同的构件,那么在每个项目中都拷贝一份相同的构件显然是不合理的,这样不仅会造成磁盘空间的浪费,还可能因为构件版本版本的差异造成一些不必要的麻烦。

3)maven在某一个位置统一存储所有maven项目共享的构件,这个统一的位置就是仓库,实际的maven项目都不需要再存储自身所依赖的构件,只需要声明所依赖构件的坐标,在项目运行时,maven会根据坐标到仓库中找到这些构件,然后加到classpath中,这样不但节省空间,还将构件的版本进行统一的管理(实际上maven的好处还有很多),一举多得。

2. 仓库的分类 

1)对于maven仓库只有两种 ,本地仓库和远程仓库。maven运行时会根据坐标寻找构件,首先会在现在本地仓库寻找目标,如果本地仓库不存在目标构件,maven会去远程仓库寻找,当远程仓库也没有找到目标构件时,maven就会报错。如果在远程仓库找到目标构件,便会下载到本地仓库供项目使用。

2)远程仓库也可以分为三种,中央仓库、 私服、其它的三方仓库。前者是maven自带的远程仓库,包含了绝大部分的开源构件,在默认配置下,如果本地仓库不存在目标构件,maven获取中央仓库寻找目标构件。

3)私服是一种在局域网范围内搭建的一种特殊的远程仓库,由于中央仓库服务器在国外,且访问量及其重大,难免会出现速度慢,假如公司里的每个员工都访问中央仓库,对带宽也是一种浪费,并且对于项目中一些私有的构件,中央仓库时没有的。所以私服就是为了解决以上问题的,可以让私服代理中央仓库,然后让公司员工统一访问私服,节省带宽,速度也快,私有的构件也可以上传到私服中,供他人使用,一举多得。

3.自定义本地仓库的存储位置。

 1)maven默认的仓库存储位置在C盘的的users/用户名称/.m2/repository下,有时候因为某些原因,比如c盘空间不够,需要自定义仓库存储路径,可以编辑setting.xml 文件的localRepository元素,setting.xml文件存放在 maven的安装目录下的config文件夹下:

<localRepository>D:\ALANWANG-AIA\myRepository</localRepository>

2)修改maven安装目录的config下的setting.xml的作用域是计算机级别的,这样做的坏处是计算机多个用户会共用一个库,且maven每次升级时setting文件可能会被覆盖掉,这是就需要重新指定 本地库的位置了。如果需要定义用户级别本地库,只需要把setting.xml 拷贝到用户的.m2目录下就可以,这样就可以定制用户自己的本地库,maven升级时也不用修改setting.xml 。

4.远程仓库的配置

安装好maven以后,如果不执行任何命令,本地仓库目录是不存在的,当用户输入第一条命令时,maven才会创建本地仓库,然后根据配置和需要,从远程仓库下载构件至本地仓库。由于最原始的本地仓库是空的,maven必须知道至少一个远程仓库是可用的,才能在执行命令的时候下载到构件,中央仓库就是这样一个默认的远程仓库,maven的安装文件自带了远程仓库的配置,该配置文件名为pom-4.0.0.xml,该配置文件存放在maven-model-bulider-3.0.jar(maven3) 中,不同的版本可能存放的位置不同,但是名称都是pom-4.0.0.xml,打开可以看到:

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

这段配置是所有maven项目都会继承的超级pom.其中url就是远程仓库的地址,可以拷贝该地址到浏览器,可以浏览到该仓库的所有构件。

还有一种特殊的远程仓库叫做私服,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当maven 需要下载构件的时候,会首先请求私服,私服如果不存在该构件,就会转而请求远程仓库,如果远程仓库存在该构件,那么该构件会被缓存到私服上,然后在供局域网内用户使用。

之所以会架设私服,是因为私服可以为我们带来以下好处,

1,节省外网带宽,大量对外部仓库重复请求会消耗很大的带宽,利用私服代理远程仓库以后,只需要第一次下载构件时去请求远程仓库,所下载的构件就被缓存到了私服上,其他用户再次请求该构件时,只需要从私服拿可以了。

2,加速构建,使用过中央仓库的用户可以发现,请求中央仓库会很慢,一是网络的问题,二是maven执行构建的时候会不停的检查远程仓库数据,如果使用私服,这些问题就不存在了。

3,部署第三方构件,当某个构件用户自行开发的构件,这样的构件无法从外部仓库获得,建立私服以后,便可以将这些构件上传到私服,供用户自行使用。

4,提高稳定性,降低中央仓库负荷,假如外部网络无法使用,由于私服已经缓存了大量构件,只要不下载新构件,就不会对开发造成任何影响,同时,由于中央仓库访问量巨大,维护及其艰难,能尽量减少访问就减少访问。


### Maven 仓库配置和使用指南 Maven 仓库是用于存储项目依赖项的地方,这些依赖项可以是第三方库、插件或其他项目构件。Maven 通过 `pom.xml` 文件来管理项目的依赖关系,并自动从配置的仓库中下载所需的依赖项。Maven 支持多种类型的仓库,包括本地仓库、中央仓库和远程仓库(如阿里云 Maven 仓库)。 #### 配置 Maven 仓库 Maven仓库配置通常在 `settings.xml` 文件中进行。该文件可以位于用户的主目录下(`~/.m2/settings.xml`),也可以位于 Maven 安装目录下的 `conf` 文件夹中。以下是一个配置阿里云 Maven 仓库的示例: ```xml <settings> <mirrors> <mirror> <id>aliyun</id> <mirrorOf>*</mirrorOf> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> </settings> ``` 上述配置将所有 Maven 请求镜像到阿里云的 Maven 仓库,从而加速依赖项的下载速度。 #### 使用 Maven 仓库 在 `pom.xml` 文件中,可以通过 `<dependencies>` 标签来声明项目所需的依赖项。以下是一个简单的示例: ```xml <project> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-project</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> </project> ``` 在这个示例中,`junit` 是一个常用的测试框架,版本为 `4.13.2`,并且仅在测试阶段使用。 当执行 Maven 命令(如 `mvn compile` 或 `mvn package`)时,Maven 会根据 `pom.xml` 文件中的依赖声明,从配置的仓库中下载所需的依赖项,并将其存储在本地仓库中,以便后续使用。 #### Maven 仓库的工作原理 Maven 仓库的工作原理主要包括以下几个步骤: 1. **依赖解析**:Maven 会解析 `pom.xml` 文件中的依赖项,并确定所需的构件。 2. **仓库查找**:Maven 会根据配置的仓库(本地、中央或远程仓库)查找所需的构件。 3. **下载依赖**:如果所需的构件在本地仓库中,Maven 会从远程仓库下载它,并将其存储在本地仓库中。 4. **构建项目**:Maven 使用下载的依赖项来构建项目,并生成最终的构建输出(如 JAR 文件)。 通过这种方式,Maven 能够自动化地管理项目的依赖关系,从而简化项目的构建和管理过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值