maven release版本不更新原因分析

来源:互联网 发布:网络银行有几家 编辑:程序博客网 时间:2024/05/22 04:35

问题

有个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,则版本也不是稳定的。

原创粉丝点击