maven是怎么判断包在本地仓库和远程仓库哪个是新的

2024-11-01 19:22:18
推荐回答(2个)
回答(1):

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。比如说,你的项目配置了junit-3.8的依赖,在你运行mvntest的时候,Maven需要使用junit-3.8的jar文件,它首先根据坐标查找本地仓库,如果找到,就直接使用。如果没有,Maven会检查可用的远程仓库配置,然后逐个尝试这些远程仓库去下载junit-3.8的jar文件,如果远程仓库存在该文件,Maven会将其下载到本地仓库中,继而使用。如果尝试过所有远程仓库之后,Maven还是没能够下载到该文件,它就会报错。Maven缺省的本地仓库地址为${user.home}/.m2/repository。也就是说,一个用户会对应的拥有一个本地仓库。你也可以自定义本地仓库的位置,修改${user.home}/.m2/settings.xml:D:\java\repository你还可以在运行时指定本地仓库位置:mvncleaninstall-Dmaven.repo.local=/home/juven/myrepo/还有一点需要理解的是,当我们运行install的时候,Maven实际上是将项目生成的构件安装到了本地仓库,也就是说,只有install了之后,其它项目才能使用此项目生成的构件。了解了本地仓库,接着了解一下Maven缺省的远程仓库,即Maven中央仓库。安装好Maven之后,我们可以建立一个简单的项目,配置一些简单的依赖,然后运行mvncleaninstall,项目就构建好了。我们没有手工的去下载任何jar文件,这一切都是因为Maven中央仓库的存在,当Maven在本地仓库找不到需要的jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。这个Maven中央仓库是在哪里定义的呢?在我的机器上,我安装了maven-2.0.10,我可以找到这个文件:${M2_HOME}/lib/maven-2.0.10-uber.jar,打开该文件,能找到超级POM:\org\apache\maven\project\pom-4.0.0.xml,它是所有MavenPOM的父POM,所有Maven项目继承该配置,你可以在这个POM中发现如下配置:centralMavenRepositorySwitchboarddefaultmaven2,它关闭了snapshot版本构件下载的支持。

回答(2):

对于realese不是很确认,但是对于snapshot来说,是会试着和服务器连接并比较。如果版本一致,就比较时间。并会下载带版本号和时间的jar包。 当然,如果服务器连不上,或者服务器没有对应的jar包,还是会使用本地jar包了。