Maven-仓库

572 阅读4分钟

Maven-仓库

在 Maven 中,仓库是一个位置,项目中依赖的第三方库,都放在这里。所有的 Maven 项目都可以共享这个仓库,只需要通过依赖的坐标,就可以在仓库中找到需要的依赖。

Maven仓库分为两种:

1、本地仓库

当Maven在执行编译或测试时,如果需要使用依赖文件,它会基于坐标使用本地仓库的依赖文件。默认情况下,再Window、macOS,或是 Linux,每个用户都会在自己的用户目录下有一个路径名为 .m2/repository/ 的仓库目录。如果你想自定义本地仓库目录地址,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为你想要的仓库地址。

<localRepository></localRepository>

2、远程仓库

默认情况下,本地仓库是被注释掉的,无法使用的,那么必须配置一个可用的远程仓库,否则 Maven 在 build的时候就无法去下载依赖。

中央仓库是一个可用的远程仓库,里面包含了这个世界上绝大多数流行的开源 Java 类库,以及源码、作者信息、许可证信息等信息。再国内访问中央仓库比较慢,所以选择使用阿里的远程仓库:

**仓库服务 (aliyun.com)**阿里云仓库地址

<repositories>
    <repository>
        <id>spring</id>
        <url>https://maven.aliyun.com/repository/spring</url>
        <releases>
            <enabled>true</enabled>
        </releases>    
        
        <snapshots>
            <enabled>true</enasbled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
        </snapshots>
    </repository>
</repositories>
  • repositories 可以包含一个或者多个repository元素,以声明一个或者多个仓库。

  • id,仓库声明的唯一id,需要注意的是,Maven自带的中央仓库使用的id为central,如果其他仓库也使用了该id,就会覆盖中央仓库的配置。

  • url,指向了仓库的地址。

  • releases和snapshots,用来控制Maven对于发布版构件和快照版构件的下载权限。

  • enabled子元素为 true 时表示可以从仓库下载发布版构件和快照版构件。

  • updatePolicy 子元素用来配置Maven从远处仓库检查更新的频率。

    • 默认值是daily,表示每天检查一次;
    • 可选值 never 表示从不检查;
    • 可选值always表示每次构建时检查更新;
    • 可选值interval表示每隔X分钟检查一次更新(X为任意整数)。
  • checksumPolicy 子元素用来配置Maven检查校验的策略。在下载构件的时候,Maven会去校验,如果校验失败,

    • 当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息;
    • 值为fail 时,Maven遇到校验错误就让构建失败;
    • 值为ignore时,Maven将完全忽略校验。

搭建远程仓库的另外一个目的是方便部署我们自己的项目构件至远程仓库供其他团队成员使用,这时候需要配置distributionManagement元素:

<distributionManagement>
        <repository>
            <id>releases</id>
            <name>public</name>
            <url>http://192.168.1.1:8081/nexus/content/repositories/releases</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url>http://192.168.1.1:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
</distributionManagement>
  • repository表示发布版本构件的仓库。
  • snapshotRepository 表示快照版本(开发测试用)的仓库。
  • 这两个元素都需要配置id、name和url,id为远程仓库的唯一标识,name是为了方便阅读,url表示仓库的地址。

配置好了以后运行命令 mvn clean deploy,Maven就会将项目部署到对应的远程仓库。项目是快照还是发布版本通过之前远程仓库配置项中的 releases 和 snapshots 来区分。

3、仓库镜像

如果仓库A可以提供仓库B存储的所有内容,那么A是B的一个镜像。可在settings.xml 使用mirror标签设置镜像,例阿里云镜像:

<mirrors>
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>central</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors
  • <mirrorOf>*</mirrorOf>,匹配所有远程仓库。
  • <mirrorOf>external:*</mirrorOf>,匹配所有远程仓库,使用localhost的除外,使用 file:// 协议的除外。也就是说,匹配所有不在本机上的远程仓库。
  • <mirrorOf>repo1,repo2</mirrorOf>,匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
  • <mirrorOf>*,!repo1<mirrorOf>,匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
  •  <mirrorOf>central</mirrorOf> 表示任何对于中央仓库的请求都会转至该镜像。

4、私服

私服是一种特殊的远程仓库,它架设在局域网内中,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,先从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,并缓存到私服上。

仓库搜索

提供仓库内容搜索服务,方便寻找到各个库依赖的版本选择自己需要的。

Maven Repository: Search/Browse/Explore (mvnrepository.com)(有时候访问缓慢,这是我常用的) Nexus Repository Manager (sonatype.org)

文章学习内容出自终于把项目构建神器Maven捋清楚了~ | Java 程序员进阶之路 (tobebetterjavaer.com)