`

maven中的snapshot来源与注意事项

 
阅读更多

maven的依赖管理是基于版本管理的,在maven2之后,把版本管理细化snapshot 快照仓库和release发布仓库。release版本,对于发布状态的artifact(就是被依赖的jar包),如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。这里也为snapshot 的出现打下了伏笔。

        快照版本,很多人不是特别理解为什么要有这个事物的出现,它的出现对于编程有什么帮助吗?没有snapshot出现之前,我们开发过程依赖别人开发某个包,通常maven会集中管理这些依赖包,它会要求别人打包成jar放到镜像服务器上,自己本地的pom.xml文件设置了依赖后,maven编译时,会自动从镜像服务器上下载依赖。但如果镜像服务器上有相同版本的依赖时,maven就不会下载,这是上段文字的白话版本,那么举个例子说明一下。

       比如,你的工程要依赖的core版本是 1.0.0 版本,结果这个版本还正处于对方(叫小菜吧)的开发过程中,他利用maven命令mvn install打包成jar,并部署到服务器上,根据pom设定的版本,你顺利下载了依赖包。但小菜后续开发过程,发现了一个致命bug,那么他再操作一次,那么,即使服务器的更新是你需要的,你只能干着急,只能跟小菜吼一声,“你的版本,老子无法更新依赖包,再给我发一个新的版本上去。”小菜一听,好吧,那我把版本升到 1.0.1 版本,你通过update dependencies 下载了这个新版本的jar包。这样的情况,会循环地出现,那么你和小菜有点恼火了,maven就是老鼠钻到风箱里,两头受气,maven想能不能开发一个功能,使双方默认可以上传并打包下载到最新的开发版本,而不用修改版本号,否则开发完成之后,服务器上是一堆的release版本。有了这个思路,maven增加了划时代的功能,snapshot ,这样依赖版本为 1.0.0-SNAPSHOT (注意必须为全大写),当服务器上有更新时,会自动下载到本地,省去了不少、和小菜的沟通时间,也减小了不少由于版本问题带来的编译错误。

      任何东西的使用,需要遵循其规则,snapshot虽然好用,如果使用不当,反而易造成困惑问题。首先,开发一个依赖jar包时,注意snapshot版本号的不同,需要一个统一的地方记录各自的版本,在开发周期很长的情况下,版本号release的顺序并非按版本号顺序发布,重要的是,大家的开发版本号不能重复。如果你也在开发这个core.jar,你依赖于本地,而服务器上别人有也相同版本号的core.jar定期放在服务器上,这样,本地的jar经常会被来自服务器版本覆盖而导致错误。

        总结一下,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而保证了开发进度和质量。

1、mvn调试信息:
比如:mvn -X -e clean compile
-e:打印错误信息 。
-X:代表debug模式 。

2、如果在setting里用mirror的,直接报找不到对应的jar错误。
原来setting配置:
<mirrors>
        <mirror>
            <id>Nexus</id>
            <url>http://192.168.4.11/content/groups/public/</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
</mirrors>
这个是有问题的,可以用-X -e看到如下信息:
[DEBUG] Repositories (dependencies): [Nexus (http://192.168.4.11/content/groups/
public/, releases)]
[DEBUG] Repositories (plugins)     : [Nexus (http://192.168.4.11/content/groups/
public/, releases)]

明显public只对release有效,对snapshot无效。解决办法只能需要定义mirrortype指定对snapshot有效。
更改为:
<mirrors>
    <mirror>
            <id>Nexus</id>
            <url>http://192.168.4.11/content/groups/public/</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
        <mirror>
            <id>Nexus2</id>
            <url>http://192.168.4.11/content/groups/public/</url>
            <mirrorOf>public-snapshots</mirrorOf> // 对snapshots有效
        </mirror>
</mirrors>

<profiles> //定义public-snapshots profile
        <profile>
            <id>public-snapshots</id>
            <repositories>
                <repository>
                    <id>public-snapshots</id>
                    <url>http://public-snapshots</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>public-snapshots</id>
                    <url>http://public-snapshots</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <activeProfiles> 
        <activeProfile>public-snapshots</activeProfile> 
    </activeProfiles>   //使profile生效。

再看debug输出:
[DEBUG] Repositories (dependencies): [Nexus (http://192.168.4.11/content/groups/
public/, snapshots), central (http://repo1.maven.org/maven2, releases)]
[DEBUG] Repositories (plugins)     : [Nexus (http://192.168.4.11/content/groups/
public/, snapshots), central (http://repo1.maven.org/maven2, releases)]

搞定!
总感觉上面的方法有点蹩脚!
sonatype的官方配置如下:
另外一种配置方法见:http://www.sonatype.com/books/nexus-book/reference/maven-sect-single-group.html

3、注意:maven会自动从仓库中检查模块A的快照版本的最新版本,当发现有更新时便进行下载。默认情况下,maven每天检查一次更新(由仓库配置的updatePolicy控制),用户也可以使用命令-U参数强制让maven检查更新,如maven clean install -U。
元素updatePlocy说明:用来配置maven从远程仓库检查更新的频率,默认的值为daily,表示每天检查一次。

分享到:
评论

相关推荐

    maven 配置注意事项

    在IT行业中,Maven是一个非常重要的工具,它用于管理和构建Java项目。本篇文章将详细讲解在配置Maven时需要注意的一些关键点,确保你的开发环境能够顺利运行。 首先,要安装Maven。通常,你需要从Apache官方网站...

    Maven使用方法及注意事项

    《Maven使用方法及注意事项详解》 Maven是一款强大的项目管理工具,主要用于Java项目的构建、管理和依赖管理。它遵循约定优于配置的原则,大大简化了项目的构建流程。本文将详细介绍Maven的使用方法以及一些关键...

    基于Jenkins的Maven SNAPSHOT版本检查插件设计源码

    该项目为基于Jenkins平台的Maven SNAPSHOT版本检查插件设计源码,包含27个文件,包括4个YAML配置文件、4个Java源代码...该插件旨在检查pom.xml文件中是否包含SNAPSHOT版本标识,适用于自动化构建和版本控制流程管理。

    Maven中主要jar包集合

    本文将深入探讨"Maven中主要jar包集合"这一主题,旨在帮助初学者理解Maven的工作原理以及如何利用它来高效地管理jar包。 首先,我们要明白什么是Maven。Maven是Apache软件基金会开发的一个项目管理和综合工具,主要...

    netcdfAll-5.5.4-SNAPSHOT.jar

    在Maven仓库中,通常会按照这样的命名规则来组织SNAPSHOT版本,以便跟踪和更新开发中的库。 总的来说,"netcdfAll-5.5.4-SNAPSHOT.jar"是一个包含NetCDF Java库所有组件的JAR文件,适用于Java项目,特别是那些使用...

    maven聚合与继承配置

    在Java开发中,Maven是一个强大的项目管理工具,它帮助开发者构建、管理和部署软件。Maven通过使用一种标准的项目对象模型(Project Object Model,POM)来描述项目,并利用插件来执行构建任务。本示例将深入探讨...

    maven安装与使用

    **注意事项:** - 如果检测步骤失败,可以尝试重启计算机或直接将Maven的绝对路径添加到`PATH`环境变量中。 #### 三、Eclipse中配置Maven **1. 安装Maven插件** - 打开Eclipse,选择`Help` -&gt; `Install New ...

    eclipse中Maven安装插件和maven.zip

    通常,这种文件会提供额外的提示或注意事项,确保安装和配置的正确性。 总结一下,Eclipse中的Maven插件让开发者能够方便地在IDE内管理Maven项目,而不用离开Eclipse去执行命令行操作。通过正确安装和配置插件,...

    maven中setting阿里云的详细镜像配置

    maven中setting阿里云的详细镜像配置,setting的配置细节 maven中setting阿里云的详细镜像配置,setting的配置细节

    maven3.0 maven3.0

    6. **支持更多元化格式的POM**:Maven 3.0 支持XML、JSON等多种格式的POM文件,使得与其他工具的集成更加便捷。 7. **性能提升**:Maven 3.0 在内存使用和启动速度上都有所优化,提升了整体的用户体验。 ### Maven...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    Maven 3.5.2作为一个成熟的项目管理工具,极大地简化了Java开发中的构建和依赖管理。通过理解并熟练使用Maven,开发者可以更专注于编写代码,而无需关心构建过程的复杂性。在实际工作中,正确配置和利用Maven可以...

    maven-3.9.7

    内容概要:Maven 安装与配置(Windows) Maven 概述: Maven 是一个流行的项目管理和构建工具,主要用于 Java 项目。它通过一个项目对象模型 (POM) 文件来管理项目的构建、依赖和文档。 适合人群: Java 开发人员 ...

    android maven

    **六、注意事项** - 要确保你的Maven本地仓库已经包含了所有Android库的依赖,否则Maven可能无法正确地下载和构建项目。 - 对于Android的特殊资源,如布局、图片等,Maven可能需要额外的配置才能正确处理。 - 有些...

    fastdfs-client-java-1.29-SNAPSHOT.jar

    解决 Maven 无法下载 fastdfs-client-java-1.29-SNAPSHOT 依赖,直接下载之后用maven命令存储到本地maven仓库即可。 maven命令 mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java ...

    maven安装maven安装maven安装maven安装maven安装

    maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...

    maven 3.0.4

    Maven 3.0.4 是 Apache Maven 的一个旧版本,但即便如此,它依然在许多项目中被广泛使用,因其稳定性与强大的功能而备受赞誉。Maven 是一个Java项目管理工具,它简化了构建、依赖管理和项目文档的生成过程。以下将...

    maven-3.3.9.zip

    Maven 3.3.9的安装与配置是Java开发者日常工作中不可或缺的一部分。理解并熟练掌握Maven的使用,将极大地提高开发效率,简化项目管理,同时确保团队协作的顺畅。通过以上步骤和概念,你应该对Maven有了全面的认识,...

    Gradle maven工件发布与maven、maven发布、android maven Gradle插件的演练

    【maven】说明:Gradle maven工件发布与maven、maven发布、android maven Gradle插件的演练。该项目包含..., (Gradle maven artifacts publishing walkaround with maven , maven-publish , android-maven gradle ...

Global site tag (gtag.js) - Google Analytics