首页 文章

什么是Maven Snapshot,为什么我们需要它?

提问于
浏览
683

我对Maven Snapshot的含义以及为什么要构建一个它有点困惑?

7 回答

  • 688

    Maven中的快照版本尚未发布 .

    这个想法是 before 发布(或任何其他版本),有一个 1.0-SNAPSHOT . 该版本可能会成为 1.0 . 它基本上是“ 1.0 正在开发中” . 这可能接近真正的 1.0 版本,或者相当远(例如,在 0.9 版本之后) .

    "real"版本和快照版本之间的区别在于快照可能会获得更新 . 这意味着今天下载 1.0-SNAPSHOT 可能会提供与昨天或明天下载不同的文件 .

    通常,快照依赖项应该在开发期间存在,并且没有发布的版本(即没有非快照)应该依赖于快照版本 .

  • 795

    另外三个答案可以让您对 -SNAPSHOT 版本有一个很好的看法 . 我只是想在发现 SNAPSHOT 依赖时添加一些关于Maven行为的信息 .

    构建应用程序时,Maven将在 local 存储库中搜索依赖项 . 如果在那里找不到稳定版本,它将搜索远程存储库(在 settings.xmlpom.xml 中定义)以检索此依赖关系 . 然后,它会将其复制到本地存储库,以使其可用于下一个版本 .

    例如, foo-1.0.jar 库被视为 stable 版本,如果Maven在本地存储库中找到它,它将使用此库作为当前版本 .

    现在,如果你需要一个 foo-1.0-SNAPSHOT.jar 库,Maven会知道这个版本不稳定并且可能会有变化 . 这就是为什么Maven会尝试在远程存储库中找到更新版本的原因,即使在本地存储库中找到了该库的一个版本 . 但是,此检查每天只进行一次 . 这意味着如果您在本地存储库中有 foo-1.0-20110506.110000-1.jar (即此库已在2011/05/06 11:00:00生成),并且如果您在同一天再次运行Maven构建,则Maven将 not 检查新版本的存储库 .

    Maven为您提供了一种可以在存储库定义中更改此更新策略的方法:

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

    XXX 可以是:

    • always :Maven将检查每个版本的更新版本;

    • daily ,默认值;

    • interval:XXX :以分钟为单位的间隔(XXX)

    • never :Maven永远不会尝试检索另一个版本 . 只有当它不存在于本地时才会这样做 . 使用该配置, SNAPSHOT 版本将作为稳定库处理 .

    (可以找到settings.xml的模型here)

  • 3

    “SNAPSHOT”术语表示构建是给定时间代码的快照 .

    这通常意味着这个版本仍处于重大发展阶段 .

    当代码准备好并且是时候释放它时,您将需要更改POM中列出的版本 . 然后,您将使用像“1.0”这样的标签而不是“SNAPSHOT” .

    有关版本控制的一些帮助,请查看Semantic Versioning specification .

  • 11

    “发布”是版本的最终版本,不会发生变化 .

    “快照”是一个构建,可以由具有相同名称的另一个构建替换 . 这意味着构建可能随时发生变化,并且仍处于积极发展阶段 .

    基于相同的代码,您有不同构建的不同工件 . 例如 . 你可能有一个调试,一个没有 . 一个用于Java 5.0,一个用于Java 6.通常,只需一个构建即可完成所需的一切 . ;)

  • 22

    Maven版本可以包含字符串文字“SNAPSHOT”,表示项目当前处于活动开发状态 .

    例如,如果您的项目具有版本“1.0-SNAPSHOT”并且您将此项目的工件部署到Maven存储库,则如果您要在11部署版本,Maven会将此版本扩展为“1.0-20080207-230803-1” :2008年2月7日下午8点UTC . 换句话说,当您部署快照时,您不会发布软件组件;您将在特定时间发布组件的快照 .

    所以主要是快照版本用于正在开发的项目 . 如果您的项目依赖于正在进行开发的软件组件,则可以依赖快照发布,并且Maven将在您运行构建时定期尝试从存储库下载最新快照 . 同样,如果系统的下一个版本的版本为“1.8”,那么在项目正式发布之前,您的项目将具有“1.8-SNAPSHOT”版本 .

    例如,以下依赖项将始终下载spring的最新1.8开发JAR:

    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>1.8-SNAPSHOT”</version>
        </dependency>
    

    Maven

    maven发布过程的一个例子

    enter image description here

  • 56

    这是存储库的快照的样子,并且在这种情况下未启用,这意味着此处引用的存储库是稳定的,并且不需要更新 .

    <project>
        ...
        <repositories>
            <repository>
                <id>lds-main</id>
                <name>LDS Main Repo</name>
                <url>http://code.lds.org/nexus/content/groups/main-repo</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    </project>
    

    另一个案例是:

    <snapshots>
            <enabled>true</enabled>
    </snapshots>
    

    这意味着Maven将查找此存储库的更新 . 您还可以使用标记指定更新的间隔 .

  • 1

    通常在maven中我们有两种类型的构建1)快照构建2)发布构建

    • 快照构建:SNAPSHOT是指示当前部署副本不像常规版本的特殊版本,maven会检查远程存储库中每个构建的版本,因此快照构建只是维护构建 .

    • 发布版本:发布意味着在构建版本中删除SNAPSHOT,这些是常规版本 .

相关问题