背景:java体系,通常公司内部都会通过nexus搭建私有仓库。私有仓库与maven中央仓库不同,1、中央仓库都是deploy 稳定、正式版本的jar包。如果jar包存在重大更新,则通过 update jar包的version,所以项目中的引入中央仓库的jar包,只要version不变化则jar包的内容也不会变化。
2、nexus私有仓库则不同,当java代码变更时,存在不更新maven坐标的version,重新deploy的情况,所以相同的maven坐标在不同的时间点,可能jar包里的内容是变化的。比如公司内部团队A在私有仓库 于2022年10月01日 10:00deploy了 testA,如下坐标。
<groupId>com.test</groupId>
<artifactId>testA</artifactId>
<version>1.0.0-snapshot</version>
2022年10月01日 14:00在 testA项目内,又重新加了一些class变更,又deploy到nexus私有仓库中了。
你所在团队的项目testB,引入了 testA依赖。于10月01日 11:00构建项目时
mvn compile -Dmaven.test.skip=true
此时mvn从私有仓库nexus中将 testA拉到了mvn的localRepository中了。此后只要mvn再构建项目B,项目B所依赖的testA都从localRepository中获取了。即使10月01日 14:00nexus中jar包的内容发生变化了,maven由于从本地仓库获取testA,所以是感知不到testA的变化的。
所以针对私有仓库,通过配置maven的updatePolicy可以强制maven从私有下载最新的jar包。
项目 pom.xml 或者 maven的 settings.xml中配置。
<repositories>
<repository>
<id>rdc-releases</id>
<url>https://xxx/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<!--always、daily、interval、never-->
</releases>
<snapshots>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
updatePolicy表示maven从远处仓库检查更新的频率,默认值是daily,表示Maven每天检查一次。其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查一次更新。