maven repository详解

 更新时间:2023年05月31日 15:45:38   作者:houJINye  
这篇文章主要介绍了maven repository的相关知识,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

保存构件的地方即为repository(仓库)。

仓库的分类

maven仓库分为两类:本地仓库和远程仓库。

当maven根据pom中定义的坐标寻找构件时,首先在本地仓库中寻找,当找不到时再从远程仓库寻找,都找不到时抛出异常。

maven远程仓库还可进一步分类:

本地仓库

默认maven会在c盘创建一个.m2的本地仓库,如果要修改本地仓库地址,可以修改setting.xml文件:

<settings>
   <localRepository>D:\64\m2\repository</localRepository>
</settings>

远程仓库中央仓库

使用解压软件打开%M2_HOME%/lib/maven-model-builder-3.1.1.jar,然后访问路径org/apache/maven/model/pom-4.0.0.xml,可看到:

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

包含这段配置的文件是所有maven项目都会继承的超级pom。上述配置中,snapshots子元素enabled的值为false,表示不从中央仓库下载快照版本的构件。

私服

私服是一种特殊的远程仓库,架设于局域网内。当maven需要下载构件时,先从私服寻找,私服中没有再从外部仓库下载。

私服有许多显著的优点:

■ 节省外网带宽

■ 加速maven构件

■ 部署第三方构件

■ 提高稳定性,增强控制

■ 降低中央仓库的负荷

远程仓库配置

如果默认的远程中央仓库无法满足需求,我们可以在pom中添加远程仓库的配置:

<project>
   ...
   <repositories>
     <repository>
       <id>jboss</id>
       <name>JBoss Repository</name>
       <url>http://repository.jboss.com/maven2/</url>
       <releases>
         <enabled>true</enabled>
       </releases>
       <snapshots>
         <enabled>false</enabled>
       </snapshots>
       <layout>default</layout>
     </repository>
   </repositories>
</project>

在repositories元素下,使用repository元素声明一个或多个远程仓库。上面的xml声明了一个id为jboss,名称为JBoss Repository的仓库。

任何一个仓库的id是唯一的,maven自带的中央仓库使用的id为central,如果其他仓库的id也为central,那么它将覆盖自带的中央仓库。

url指向仓库地址,一般该地址都是基于http协议。releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持。

release和snapshots元素还可以配置另外两个子元素:

<snapshots>
   <enabled>true</enabled>
   <updatePolicy>daily</updatePolicy>
   <checksumPolicy>ignore</checksumPolicy>
</snapshots>

updatePolicy元素配置maven从远程仓库检查更新的频率,默认值为daily。其他可用值有:never —— 从不检查更新,always —— 每次构建都检查更新,interval:X —— 每隔X分钟检查一次更新。用户也可以使用命令 mvn clean install -U强制更新。

checksumPolicy元素用来配置当下载构件时,maven检验和验证失败时候的动作,默认为warn,即输出警告信息,ignore则为忽略错误。

远程仓库认证

如果远程仓库出于安全的考虑设置了用户名和密码,这时候我们必须在settings.xml中配置:

<settings>
   ...
   <servers>
     <server>
       <id>my-proj</id>
       <username>repo-user</username>
       <password>repo_pwd</password>
     </server>
   </servers>
</settings>

上述xml指定了id为my-proj的远程仓库的用户名和密码。

部署至远程仓库

如前所述,私服一大作用是可以部署第三方构件。无论是开发中生成的构件还是正式发布的构件,都需要部署到私服中供小组中的其他开发人员使用,在maven项目pom中配置:

<project>
   ...
   <distributionManagement>
     <snapshotRepository>
       <id>user-snapshot</id>
       <name>User Porject Snapshot</name>
       <url>http://192.168.10.217:8081/nexus/
           content/repositories/snapshots/</url>
       <uniqueVersion>true</uniqueVersion>
     </snapshotRepository>
     <repository>
       <id>user-release</id>
       <name>User Porject Release</name>
       <url>http://192.168.10.217:8081/nexus/
           content/repositories/releases/</url>
     </repository>
   </distributionManagement>
</project>

上述xml明确指定了快照版本和发行版本的私服id和地址,如前所述,如果私服设置了账号密码,则应该在settings.xml中设置对应id的私服账号和密码,就本例来说,我们应该在settings.xml中设置:

<settings>
   <servers>
     <server>
       <id>user-release</id>
       <username>deployment</username>
       <password>deployment123</password>
     </server>
     <server>
       <id>user-snapshot</id>
       <username>deployment</username>
       <password>deployment123</password>
     </server>
   </servers>
</settings>

配置正确后,可以运行命令mvn clean deploy将项目构建输出的构件部署到对应的远程仓库。

快照版本

版本元素version中添加SNAPSHOT标识,表明该构件为快照版本。SNAPSHOT版本的构件发布到私服的过程中,maven会自动加上时间戳。另一位开发者从该私服获取这个构件的时候,maven会自动获取时间戳最新的构件。

快照版本只应该在组织内部依赖使用,项目不应该依赖于任何组织外部的快照版本依赖。因为快照版本的不稳定性会对项目造成潜在的危险。

镜像

如果仓库B可以提供仓库A存储的所有内容,那么就可以认为B是A的一个镜像。maven默认的远程中央仓库由于服务器不在中国,所以访问速度可能会慢些,这时候可以再settings.xml中配置一个镜像:

<settings>
   ...
   <mirrors>
     <mirror>
       <id>maven.net.cn</id>
       <name>one of the central mirrors in china</name>
       <url>http://maven.net.cn/content/groups/public</url>
       <mirrorOf>central</mirrorOf>
     </mirror>
   </mirrors>
</settings>

<mirrorOf>的值为central,表示该配置为中央仓库的镜像。任何对于中央仓库的请求都会本转至该镜像。

镜像常用于私服。由于私服可以代理任何外部的公共仓库,所以可以说私服就是所有仓库的镜像。如:

<settings>
   ...
   <mirrors>
     <mirror>
       <id>nexus</id>
       <mirrorOf>*</mirrorOf>
       <url>http://192.168.10.217:8081/nexus/content/groups/public/</url>
     </mirror> 
  </mirrors>
</settings>

<mirrorOf>的值为*号,表示http://192.168.10.217:8081/nexus/content/groups/public/是所有外部仓库的镜像。任何对远程仓库的请求都会被转到这个地址。

<mirrorOf>的配置:

■ <mirrorOf>*<mirrorOf>:匹配所有的远程仓库

■ <mirrorOf>external:*<mirrorOf>:匹配所有不在本机上的远程仓库

■ <mirrorOf>repo1,repo2<mirrorOf>:匹配仓库repo1和repo2

■ <mirrorOf>*,!repo1<mirrorOf>:匹配除了repo1之外的所有远程仓库

镜像仓库完全屏蔽了被镜像仓库,当镜像仓库停止服务的时候,maven仍无法访问被镜像仓库,因而将无法下载构建。

仓库搜索服务

下面列出几个目前能用的maven坐标服务:

1.The Centrl Repository:http://search.maven.org/

2.Maven Repository:http://www.mvnrepository.com/

3.Nexus Repository Manager:https://repository.sonatype.org/#welcome

到此这篇关于maven repository的文章就介绍到这了,更多相关maven repository内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现的Windows资源管理器实例

    Java实现的Windows资源管理器实例

    这篇文章主要介绍了Java实现的Windows资源管理器,实例分析了基于java实现windows资源管理器的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Spring Cloud Alibaba Nacos Config加载配置详解流程

    Spring Cloud Alibaba Nacos Config加载配置详解流

    这篇文章主要介绍了Spring Cloud Alibaba Nacos Config配置中心实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-07-07
  • 基于springboot bean的实例化过程和属性注入过程

    基于springboot bean的实例化过程和属性注入过程

    这篇文章主要介绍了基于springboot bean的实例化过程和属性注入过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 一文详解MVCC的执行原理

    一文详解MVCC的执行原理

    MVCC是一种并发控制机制,用于解决数据库并发访问中,数据一致性问题,它通过在读写操作期间保存多个数据版本,以提供并发事务间的隔离性,本文将和大家简单聊聊MVCC的执行原理,需要的朋友可以参考下
    2023-12-12
  • Java基础知识精通数组的内存分析

    Java基础知识精通数组的内存分析

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素
    2022-04-04
  • JavaSE实现电影院系统

    JavaSE实现电影院系统

    这篇文章主要为大家详细介绍了JavaSE实现电影院系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • java实现的xml格式化实现代码

    java实现的xml格式化实现代码

    这篇文章主要介绍了java实现的xml格式化实现代码,需要的朋友可以参考下
    2016-11-11
  • java正则表达式验证工具类

    java正则表达式验证工具类

    这篇文章主要介绍了java正则表达式验证工具类,可以校验电话号码,身份证号码,日期格式,URL,email等等,需要的小伙伴参考下吧。
    2015-03-03
  • Spring Boot 动态数据源示例(多数据源自动切换)

    Spring Boot 动态数据源示例(多数据源自动切换)

    本篇文章主要介绍了Spring Boot 动态数据源示例(多数据源自动切换),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • java对象初始化顺序验证示例

    java对象初始化顺序验证示例

    以下这段小程序对调用对象构造函数时,父类构造函数、成员变量初始化函数,以及非静态初始化块调用顺序进行验证,不考虑静态成员及静态初始化块
    2014-02-02

最新评论