(三)仓库

1 仓库
 1.1 仓库配置
   仓库分为本地仓库和远程仓库,当需要依赖时,maven会先到本地仓库中根据构件坐标寻找,如果不存在则通过远程仓库下载到本地仓库再使用,如果本地和远程仓库都没有该构件则会报错。
   本地仓库和远程仓库都需要在settings.xml文件中配置。在settings.xml文件中通常将本地仓库配置在~/.m2目录下并且settings.xml文件配置在本地仓库所在目录中。使用IDEA中只需要给出maven安装目录和settings.xml文件位置,则会自动解析出本地仓库位置和远程仓库地址并根据需要下载和使用构件。
  1.2 远程仓库
    依赖远程仓库:在settings.xml文件的<repositories>标签中可配置依赖远程仓库,Maven自带的中央仓库使用的id为central,如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。该标签中的url值指向了仓库的地址,一般来说,该地址是基于http协议的,因此我们可以在浏览器中打开仓库地址浏览构件并根据我们想要的构件选择版本进行依赖。
    插件远程仓库:插件的远程仓库使用pluginRepositories和pluginRepository进行配置,与上述方式相同。
2 仓库布局
   构件在本地/远程仓库中的存储格式为:
     groupId/artifactId/version/artifactId-version-artifier.package
   这就是仓库的布局方式,任何一个构件可根据其坐标唯一确定其位置。
3 仓库解析依赖的机制
  3.1 快照版本与发布版本
    发布版本,release,表示最新稳定版本。
    快照版本,在版本号后加上-SNAPSHOT,表示最新版本。在发布过程中,Maven会自动为构件打上时间戳,如2.1-20191214.221414-13表示2019年12月14日22点14分14秒的第13次快照。有了时间戳,Maven就能随时找到仓库中的该构件2.1-SNAPSHOT的最新构件。
  3.2 仓库解析依赖
    1)当依赖范围是system时,maven直接从本地文件系统解析构件。
    2)根据依赖坐标计算仓库路径后,从本地仓库寻找,若发现则解析成功。
    3)在本地仓库不存在该构件的该情况下,若依赖的版本是显式的发布版本构件,则遍历所有的远程仓库,发现后下载到本地仓库并解析使用。
    4)若依赖的版本不明晰如RELEASE、LATEST、SNAPSHOT,Maven就会读取对应构件的所有远程仓库的元数据groupId/artifactId/maven-metadata.xml,将其与本地仓库对应的元数据合并后,得到最新的版本值,然后基于该值检查本地仓库,或者从远程仓库下载后解析使用。
    5)如果最后解析得到的构件版本是时间戳格式的快照,则复制其时间戳格式的文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式的文件。
###补充:
RELEASE:最新发布版本
SNAPSHOT:最新快照版本 
LATEST:最新版本(包含快照)
groupId/artifactId/maven-metadata.xml:包含指定groupId、artifactId的所有版本
 
####补充:
1 -U参数
  含义:强制刷新
  具体含义:
  (1)对于release版本,本地已经存在,则不会重复下载
  (2)对于snapshots版本,不管本地是否存在,都会强制刷新确保release版本为最新的版本,但是刷新并不意味着把jar包重新下载一遍。只下载几个比较小的文件,通过这几个小文件确定本地仓库和远程仓库的版本是否一致再决定是否下载。
posted @ 2020-05-02 10:18  FCity  阅读(146)  评论(0编辑  收藏  举报