当前位置: 首页 > 工具软件 > releases > 使用案例 >

nexus oss私库中 releases和snapshots库的区别?

薛宏壮
2023-12-01

转载自: 史努比小豹

想要弄明白这个问题,我们就要先明白这两种库在实际使用中的不同之处:

snapshot版本可以在同一个版本号下迭代,nexus会根据上传的时间区分出不同的版本,在maven引用时,如果使用的是snapshot版本,重新导入maven的时候,会去私库拉取最新上传的代码.

release版本每个版本号只能上传一次, 也就是说1.0 2.0这样的版本只能有一个,也就是说当前版本号下, 不能可能出现不同的代码.

接下来, 我们试想这么一个场景, 公司在开发一个新系统,版本定义为1.0. 系统中用到了一个工具, 所以, 项目组分配A同事来开发这个工具, 其他组员引入这个工具包就可以了, 当A同事开发了部分功能之后, 其他同事就可以引入使用了, 当然, A同事还在继续开发工具包中的其他功能. 每开发出一部分功能,其他同事就要去使用, 这样的场景下, A同事应该每完成一个功能就提交一次代码到库中,我们也能明白, 这个时候, 其实工具包的1.0版本其实还没有真正完成, 所属版本号依然是1.0, 基于两个库不同的特性, 我们只能将代码提交到snapshots版本库中.

上面描述的开发过程, 当主体项目上线时, A同事还在继续优化工具包,那么, 我们的线上项目是不是应该每次重启都要引用A同事刚刚开发还没有经过完全测试的最新版本?

大家其实都能想明白, 当然不能, 这样做实在是太危险了. 所以, 也就是说,线上项目在一段时间内都只能使用某个经过了完善测试的版本. 不能因为开发者的更新提交而引用未经完善测试的新版本. 这样relases库的作用就体现出来了. 这个库中只要版本号不变, 永远只有一个jar包.

当我们安装好nexus之后, 原生就有这两个库, 看名字就能知道哪是是哪个, 其实, 本质上, 任何host类型的本地库都可以作为release和snapshot库, 跟名字没有任何关系,是设置决定的, 我们打nexus的库的设置会发现一个Hosted设置选项, 选项中有三个值 :

Allow redeploy : 允许同一个版本号下重复提交代码, nexus以时间区分

Disable redeploy : 不允许同一个版本号下重复提交代码

Read-Only : 不允许提交任何版本

原生的maven-releases库是Disable redeploy设置, maven-snapshotsAllow redeploy.

我们其实可以在项目的pom文件中设置具体的relaeses库和snapshots库, 然后如果当前项目的版本号的后缀名中带着-SNAPSHOT,就会将项目提交到snapshots库中,其他的会提交到releases库中.

<distributionManagement>
    <!--releases库, id 是全局配置文件中的server名称, 配置用户名密码-->
    <repository>
        <id>nexus</id>
        <url>http://ip:8081/repository/maven-releases/</url>
    </repository>
    <!--snapshots库, id 是全局配置文件中的server的名称, 配置用户名密码-->
    <snapshotRepository>
        <id>nexus</id>
        <url>http://ip:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>
 类似资料: