Maven中的SnapShot版本和正式版本的区别

Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId、artifactId以及version。这三个属性可以唯一确定一个组件(Jar包或者War包)。

其实在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。如果在项目配置文件中(无论是build.gradle还是pom.xml)指定的版本号带有'-SNAPSHOT'后缀,比如版本号为'Junit-4.10-SNAPSHOT',那么打出的包就是一个快照版本。

快照版本和正式版本的主要区别在于,本地获取这些依赖的机制有所不同。假设你依赖一个库的正式版本,构建的时候构建工具会先在本次仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库中去拉取。所以假设你发布了Junit-4.10.jar到了远程仓库,有一个项目依赖了这个库,它第一次构建的时候会把该库从远程仓库中下载到本地仓库缓存,以后再次构建都不会去访问远程仓库了。所以如果你修改了代码,向远程仓库中发布了新的软件包,但仍然叫Junit-4.10.jar,那么依赖这个库的项目就无法得到最新更新。你只有在重新发布的时候升级版本,比如叫做Junit-4.11.jar,然后通知依赖该库的项目组也修改依赖版本为Junit-4.11,这样才能使用到你最新添加的功能。

这种方式在团队内部开发的时候会变的特别蛋痛。假设有两个小组负责维护两个组件,example-service和example-ui,其中example-ui项目依赖于example-service。而这两个项目每天都会构建多次,如果每次构建你都要升级example-service的版本,那么你会疯掉。这个时候SNAPSHOT版本就派上用场了。每天日常构建时你可以构建example-service的快照版本,比如example-service-1.0-SNAPSHOT.jar,而example-ui依赖该快照版本。每次example-ui构建时,会优先去远程仓库中查看是否有最新的example-service-1.0-SNAPSHOT.jar,如果有则下载下来使用。即使本地仓库中已经有了example-service-1.0-SNAPSHOT.jar,它也会尝试去远程仓库中查看同名的jar是否是最新的。有的人可能会问,这样不就不能充分利用本地仓库的缓存机制了吗?别着急,Maven比我们想象中的要聪明。在配置Maven的Repository的时候中有个配置项,可以配置对于SNAPSHOT版本向远程仓库中查找的频率。频率共有四种,分别是always、daily、interval、never。当本地仓库中存在需要的依赖项目时,always是每次都去远程仓库查看是否有更新,daily是只在第一次的时候查看是否有更新,当天的其它时候则不会查看;interval允许设置一个分钟为单位的间隔时间,在这个间隔时间内只会去远程仓库中查找一次,never是不会去远程仓库中查找(这种就和正式版本的行为一样了)。

Maven版本的配置方式为:

<repository>
    <id>myRepository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

其中updatePolicy就是那4种类型之一。如果配置间隔时间更新,可以写作interval:XX(XX是间隔分钟数)。daily配置是默认值。

而在Gradle,可以设置本地缓存的更新策略。

configurations.all {

// check for updates every build
resolutionStrategy.cacheChangingModulesFor  0,'seconds'

}

当然也可以按照分钟或者小时来设置.

configurations.all {

resolutionStrategy.cacheChangingModulesFor  10, ‘minutes'

}

configurations.all {

resolutionStrategy.cacheChangingModulesFor  4, ‘hours'

}

所以一般在开发模式下,我们可以频繁的发布SNAPSHOT版本,以便让其它项目能实时的使用到最新的功能做联调;当版本趋于稳定时,再发布一个正式版本,供正式使用。当然在做正式发布时,也要确保当前项目的依赖项中不包含对任何SNAPSHOT版本的依赖,保证正式版本的稳定性。

到此这篇关于Maven中的SnapShot版本和正式版本的区别的文章就介绍到这了,更多相关Maven SnapShot版本和正式版本内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 原生js实现ajax请求和JSONP跨域请求操作示例

    本文实例讲述了原生js实现ajax请求和JSONP跨域请求.分享给大家供大家参考,具体如下: 直接上代码: const ajax = (params = {}) => { const nowJson = params.jsonp ? jsonp(params) : json(params); function jsonp(params){ //创建script标签并加入到页面中 var callbackName = params.jsonp; var head = document.getEle

  • Springmvc处理ajax请求并返回json数据

    ①在springmvc方法上添加@ResponseBody注解,springmvc会将数据转换成json并返回: @ResponseBody //指定返回json数据,不跳转页面 @RequestMapping("/list") public List<User> list(User user){ System.out.println("获取到异步请求数据:"+user); //todo 根据条件做数据库查询,返回结果集合 ArrayList<Us

  • Springboot与Maven多环境配置的解决方案

    Profile用法 我们在application.yml中为jdbc.username赋予一个值,这个值为一个变量 jdbc: username: ${jdbc.username} Maven中的profiles可以设置多个环境,当我们选择a环境后,<jdbc.username>内的值将替换上述配置文件中的变量 </profiles> <profile> <id>a</id> <properties> <jdbc.usernam

  • SpringMVC通过Ajax处理Json数据的步骤详解

    SpringMVC通过Ajax处理Json数据的实现 一.前言: Ajax: 在不重新加载整个页面的前提下,对网页的部分进行刷新,例如点赞,发送短信验证码功能等等,都可以通过ajax进行实现,Ajax实现了网页的异步刷新 想要实现的效果,点击按钮,前端显示后台发送过来的学生信息,本次我们使用jquery形式的Ajax来完成 二.使用步骤 1.引入jar jar: jackson-annotation.jar jackson-core.jar jackson-datebind.jar 如果不使用M

  • JSON,AJAX,Maven入门基础

    目录 一,JSON –1,概述 –2,测试 二,AJAX –1,概述 –2,语法 –3,测试 三,Maven –1,概述 –2,核心组件 –3,使用步骤 总结 一,JSON –1,概述 JSON是一种轻量级的数据交换格式. 指定了 浏览器 和 服务器 之间数据传输的格式. –2,测试 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>测试 JSON的语法&l

  • Maven中的SnapShot版本和正式版本的区别

    Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId.artifactId以及version.这三个属性可以唯一确定一个组件(Jar包或者War包). 其实在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本.如果在项目配置文件中(无论是build

  • 如何改变idea和maven中的sdk版本

    改变idea和maven中的sdk版本 改的目的:switch()的参数不能传string类型等,jdk高版本才有的特性版本 改变的步骤,以1.5>1.8为例: 1.idea改版本 2.maven改版本 2.在setting.xml中的profiles标签内加入下面这些 <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault>

  • 详解 maven的pom.xml用<exclusion>解决版本问题

    详解 maven的pom.xml用<exclusion>解决版本问题 用maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些不需要同时下载的依赖jar . 比如配置struts-core,它会同时下载javassist和asm相关的jar,但版本又不够新,这时可以排除它们: <!-- Struts2 --> <dep

  • PowerShell中查看当前版本、Windows版本、.NET版本信息的代码

    PowerShell查看当前版本.Windows版本..NET版本信息 有很多cmdlet或者cmdlet的参数,在PowerShell不同的版本中,支持得不一样.所以,弄清楚当前PowerShell的版本信息是非常重要的一件事情.那么怎么查看当前PowerShell的版本信息呢?洪哥向大家介绍两个方法: 其实就是两个PowerShell的环境变量,一个是$psversiontable,另一个是$host. 有很多cmdlet或者cmdlet的参数,在PowerShell不同的版本中,支持得不一

  • win2012中让IIS同时支持多版本ASP.NET 3.5/4.0/4.5的方法

    Windows 2012系统天然就支持ASP.NET 4.5框架,就像Windows 2008系统默认支持ASP.NET 3.5一样.我们也可以在2012系统中安装3.5框架,让IIS同时支持ASP.NET 2.0/3.5/4.0/4.5多个版本. 注意,这里提到的四个.NET框架版本,其实已经合并为两个.ASP.NET 3.5是.NET 2.0的升级版本,ASP.NET 4.5是.NET 4.0的升级版本.也就是说,当我们需要2.0版本时,把.NET框架调整到3.5即可:同理,当我们需要4.0

  • nodejs更新package.json中的dependencies依赖到最新版本的方法

    如果手动去修改dependencies中各个包的版本号,那就太麻烦了,借助npm-check-updates工具可以很方便的将package.json中的依赖包版本号更新为最新版本. 1.安装: npm install -g npm-check-updates 使用: 2.检查package.json中dependencies的最新版本: ncu 3.更新dependencies到新版本: ncu -u 更新全部dependencies到最新版本(包括当前指定版本范围满足最新版本号的,比如^4.

  • 详解如何在Android studio中更新sdk版本和build-tools版本

    一.首先看下Android开发用到的sdk目录: build-tools 保存着一些Android平台相关通用工具,比如adb.和aapt.aidl.dx等文件.  aapt即Android Asset Packaging Tool , 在SDK的build-tools目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件.  Adb 即android debug bridge 管理模拟器和真机的万能工具,ddms 调试环境 

  • 关于java中多个JDK和切换版本介绍

    目录 前言 一.下载安装JDK 二.配置JDK 总结 前言 安装多个JDK并随时切换版本 一.下载安装JDK 我这里采用JDK8和JDK11两个版本进行示范官网下载:https://www.oracle.com/java/technologies/downloads/下载之后进行安装即可 二.配置JDK 1.系统变量 在系统变量中新建变量,变量名JAVA_HOME,JAVA_HOME11,JAVA_HOME8如图所示: 这里JAVA_HOME11,JAVA_HOME8的变量值是你安装JDK8或J

  • maven中pom.xml详细介绍

    POM 代表工程对象模型.它是使用 Maven 工作时的基本组建,是一个 xml 文件.它被放在工程根目录下,文件命名为 pom.xml. POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程. POM 也包含了目标和插件.当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标.能够在 POM 中设置的一些配置如下: project dependencies plugins goals build profiles pr

  • Maven中pom.xml配置文件详细介绍

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件. 基础配置 一个典型的pom.xml文件配置如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org

随机推荐