maven release版本不更新原因分析

问题

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


 <dependency>
     <groupId>com.github.snakerflowgroupId>
     <artifactId>snaker-coreartifactId>
     <version>2.5.1version>
 dependency>

初次尝试

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



<profile>
    <id>nexusid>
    <repositories>
        <repository>
            <id>centralid>
            <url>http://centralurl>
            <releases>
                <enabled>trueenabled>
                <updatePolicy>alwaysupdatePolicy>
            releases>
            <snapshots>
                <enabled>trueenabled>
                <updatePolicy>alwaysupdatePolicy>
            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.snakerflowgroupId>
     <artifactId>snaker-coreartifactId>
     <version>RELEASEversion>
 dependency>


<metadata>
  <groupId>com.github.snakerflowgroupId>
  <artifactId>snaker-coreartifactId>
  <versioning>
    <release>2.5.1release>
    <versions>
      <version>2.5.1version>
    versions>
    <lastUpdated>20170908072352lastUpdated>
  versioning>
metadata>

<metadata>
    <groupId>com.github.snakerflowgroupId>
    <artifactId>snaker-coreartifactId>
    <versioning>
        <release>2.5.1release>
        <versions>
            <version>2.5.1version>
            <version>2.5.2version>
            <version>2.5.3-SNAPSHOTversion>
        versions>
    <lastUpdated>20170905010758lastUpdated>
    versioning>
metadata>

SNAPSHOT

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

LATEST

最新版本,则是发布版和快照中,最新的版本,所以,如果version配置为latest,则版本也不是稳定的。

你可能感兴趣的:(maven)