根据《Maven实战》介绍,通过maven构建的服务寻找jar包的定位就是通过坐标,也就(groupid,atficatid,version) 去仓库里面找,同样的坐标的jar在本地仓库存在的话,就不会找远程仓库,远程仓库即使又更新,本地的仓库也不会再更新 。因此会造成一个问题,我们如果改了程序,必须要不断的升级版本,这无疑给被引用方带来开发的繁琐,特别时开发期间,可能需要频繁的改动,引用的又多的话,简直就是灾难。
因此Maven设计出snapshot这种版本就是为了解决这个问题。
它的原理其实也就是发布方在deploy到远程仓库的时候加上时间戳,然后被引用的地方,发现时snapshot版本,会比对远程仓库和本地仓库的该版本的时间戳,如果远程又该版本又更新了,则下载到本地仓库,并工程引用。
但是什么时候会去检查呢,这其实时依赖还一个检查配置,就是snapshot版本的更新策略,我们可以配置的pom文件中,或者settings.xml中,分别是
always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)
<repository> <id>1111</id> <name>ssss</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository>
一般情况下,我们声明snapshot版本的更新策略肯定都是always,期望拿到该版本最新的jar。
基于以上配置,根据《maven实战》的说法 一开始我的理解只要这样配置好后,maven会开启内部线程不断的对比本地和远程仓库的版本差异,被引用的时候,总能下载好,然后又引用的地方直接指向它。
结果错了,工程里面,引用的还是老的jar,即使我普通的maven updated更新操作,都不顶用,
怀疑配置的always是否真的生效了
后面反复的实验,注意到其中有段话,引用的地方在构建的时候能拿到最新的内容,文中提到【构建】时总
于是我尝试使用maven相关的命令,如 bulid,test等 等一系列的发现此时才去下载,普通的run application
其实没有触发maven的检查机制。
[INFO] Downloading from repo: http://localhost:8081/nexus/content/groups/public/org/example/aa/1.0-SNAPSHOT/maven-metadata.xml [INFO] Downloaded from repo: http://localhost:8081/nexus/content/groups/public/org/example/aa/1.0-SNAPSHOT/maven-metadata.xml (757 B at 3.1 kB/s) [INFO] Downloading from repo: http://localhost:8081/nexus/content/groups/public/org/example/aa/1.0-SNAPSHOT/aa-1.0-20200926.152119-8.pom [INFO] Downloaded from repo: http://localhost:8081/nexus/content/groups/public/org/example/aa/1.0-SNAPSHOT/aa-1.0-20200926.152119-8.pom (855 B at 22 kB/s) [INFO] Downloading from repo: http://localhost:8081/nexus/content/groups/public/org/example/aa/1.0-SNAPSHOT/aa-1.0-20200926.152119-8.jar [INFO] Downloaded from repo: http://localhost:8081/nexus/content/groups/public/org/example/aa/1.0-SNAPSHOT/aa-1.0-20200926.152119-8.jar (2.3 kB at 83 kB/s) [INFO]
顿时发现,有些东西不试真的不知道有坑,想当然的以为只是你以为。
其他:
如果时非snapshot版本,本地install可以覆盖,但是想deploy时不行的,
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7: deploy (default-deploy) on project aa: Failed to deploy artifacts: Could not transfer artifact org.example:aa:jar:1.3 from/to local-releases (http://localhost:8081/nexus/content/repositories/releases/): Transfer failed for http://localhost:8081/nexus/content/repositories/releases/org/example/aa/1.3/aa-1.3.jar 400 Bad Request
原来是 nexus 中仓库指定的Deployment Policy 版本默认是Disable Redeploy
我猜想这个就是这样子了,远程仓库大家公用的禁止覆盖的,这也有道理,你玩可以。
即使改成可以Redeploy enable ,可以部署成功,但是本地仓库也不会更新,即使配置更新策略为always。
相关推荐
【Maven的依赖验证项目】是一个关于Maven项目管理和依赖管理的实践案例,它与CSDN博主songdeitao的一篇文章《Maven依赖管理详解》相关联。在这个项目中,我们将深入理解Maven如何处理项目的依赖关系,以及如何有效地...
- `updatePolicy`:设定Maven检查远程仓库更新的频率。默认值为`daily`,意味着每天检查一次。其他可选值包括`never`(从不检查)、`always`(每次构建都检查)以及`interval:X`(每隔X分钟检查一次)。 - `...
<updatePolicy>always</updatePolicy> <enabled>true <updatePolicy>always</updatePolicy> <id>pentaho-public <name>Pentaho Public <url>...
在eclipse中新建了一个Maven工程,然后更改JDK版本为1.7,结果每次使用Maven > Update project时JDK版本都恢复成1.5。这是因为Maven的默认设置和Eclipse中的Maven集成方式所致。Maven的编译器插件默认使用javax....
在Myeclipse中您是不是有时也会被讨厌的自动更新而烦恼呢?我的这个文件是Maven4的checking for update的去除方法!大家可以借鉴一下,共同学习嘛...
maven环境变量配置及验证配置,下载前请仔细阅读资源描述,否则后果自负,最终解释权归作者所有
win10下批量删除maven 使用过程中产生的lastUpdate 文件
<updatePolicy>daily</updatePolicy> <id>beardedgeeks-releases <url>http://beardedgeeks.googlecode.com/svn/repository/releases</url> ``` 添加了上面的插件仓库信息后,我们可以使用 tomcat8-...
在maven在下载jar的时候中断了就会产生lastUpdate文件,批量删除Maven仓库未下载成功.lastupdate 的文件
<updatePolicy>daily</updatePolicy> <enabled>true <updatePolicy>always</updatePolicy> ``` 这段代码定义了一个名为`custom-repo`的profile,包含了名为`my-private-repo`的自定义仓库。`url`...
default生命周期包含编译、测试、打包、验证、部署等阶段。 5. **插件 (Plugins)**: Maven通过插件执行各种构建任务,如编译、测试、打包、部署等。插件可以通过在POM中声明来使用。 **Maven 3.5.2 的特性** 1. *...
maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...
Maven的生命周期是其核心概念之一,它定义了一系列构建阶段,如编译(compile)、测试(test)、打包(package)、验证(validate)、安装(install)和部署(deploy)。每个阶段由一系列插件目标(plugin goals)...
1.将bat脚本放到maven仓库的根目录下,双击脚本。 2.即可遍历其他文件夹删除.lastUpdate文件
### 三、验证安装 打开命令提示符(CMD),输入`mvn -v`或`mvn --version`,如果正确安装并配置了Maven,你应该能看到Maven的版本信息,包括版本号3.8.8。 ### 四、配置Maven 默认情况下,Maven使用`conf/...
Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...
在使用Maven构建Java项目时,可能会遇到这样一个问题:当你执行`Maven > Update Project`后,原本设定的JDK版本(例如1.7)被重置为较旧的版本,如1.5。这个问题主要涉及到Maven的编译器插件配置以及Eclipse中的...
3. **验证安装** 在终端中输入`mvn -version`,如果正确配置,你应该能看到Maven的版本信息,表明安装成功。 4. **Maven的目录结构** Maven的目录结构如下: - `bin`:包含可执行脚本,如`mvn`,用于执行Maven...
安装完成后,通过运行mvn -v命令来验证安装是否成功。 Maven的快速入门包括配置环境变量、了解Maven的仓库概念以及基本的构建命令。Maven的仓库分为本地仓库和远程仓库,本地仓库用于存储本地项目依赖的jar包,远程...