您的位置:首页 > 其它

maven release版本不更新原因分析

2017-09-05 18:13 1091 查看

问题

有个2.5.1版本的jar包在私服上已经存在,A机器修改代码,但是没有修改版本号,重新上传到私服后,B机器更新不下来,除非B机器删除本地maven仓库中的jar包才能更新下来。

<!--B机器 pom.xml配置-->
<dependency>
<groupId>com.github.snakerflow</groupId>
<artifactId>snaker-core</artifactId>
<version>2.5.1</version>
</dependency>


初次尝试

最初,以为是更新策略的问题,将release版本配置为总是更新,还是更新不下来。如下,

<!--C:\Users\DELL\.m2\settings.xml-->

<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>


解决

在《maven实战》P87一书中找到了更新原理。

如果是release版本,首先从本地查找,如果有,则使用本地,否则从远程服务器下载。 因为,本地已存在,所以不会更新。所以,只有删除本地,才能更新到最新。

为了更新不再删除,改了jar的版本号,将jar包的版本号改为2.5.2-SNAPSHOT,同时修改依赖的版本号,就能下载到最新版本了。

拓展

RELEASE

如果版本号配置为RELEASE ,那么用本地MAVEN_REPOSITORY/groupid/artifactid/maven-metadata.xml,与服务器的maven-metadata.xml合并,会使用最大的release版本版本号

举例,这种情况就会使用最大release版本号2.5.2,而不是2.5.3-snapshot,因为2.5.3-snapshot是快照版本不是发布版本,应该尽量避免使用RELEASE,因为版本是不稳定的。

<dependency>
<groupId>com.github.snakerflow</groupId>
<artifactId>snaker-core</artifactId>
<version>RELEASE</version>
</dependency>


<!--本地服务器的maven-metadata.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.github.snakerflow</groupId>
<artifactId>snaker-core</artifactId>
<versioning>
<release>2.5.1</release>
<versions>
<version>2.5.1</version>
</versions>
<lastUpdated>20170908072352</lastUpdated>
</versioning>
</metadata>


<!--远程服务器的maven-metadata.xml-->
<metadata>
<groupId>com.github.snakerflow</groupId>
<artifactId>snaker-core</artifactId>
<versioning>
<release>2.5.1</release>
<versions>
<version>2.5.1</version>
<version>2.5.2</version>
<version>2.5.3-SNAPSHOT</version>
</versions>
<lastUpdated>20170905010758</lastUpdated>
</versioning>
</metadata>


SNAPSHOT

snapshot版本与release,略微不同,它比较的是lastUpdated,哪个新就下载哪个,所以如果版本号是x.x.x-SNAPSHOT,肯定会更新下来。

LATEST

最新版本,则是发布版和快照中,最新的版本,所以,如果version配置为latest,则版本也不是稳定的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven