Maven自动SNAPSHOT更新

Ste*_*ier 30 maven-2 maven

假设我有一个带有以下POM的项目:

<groupId>com.mine</groupId>
<artifactId>coreJar</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
Run Code Online (Sandbox Code Playgroud)

然后在另一个项目中我总是想参考最新的SNAPSHOT:

<dependencies> 
    <dependency>
        <groupId>com.mine</groupId>
        <artifactId>coreJar</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    ...
<dependencies> 
Run Code Online (Sandbox Code Playgroud)

但不是0.0.1-SNAPSHOT,我希望它总能获得最新的SNAPSHOT版本.在过去,您可以使用LATEST,但此后已被弃用(出于合理的原因).

我明白你可以指定版本,例如:

[1.5,)
Run Code Online (Sandbox Code Playgroud)

但我永远无法使用"-SNAPSHOT":

[0.0.1,)-SNAPSHOT // Doesn't work!
Run Code Online (Sandbox Code Playgroud)

那么问题是如何让maven在我的其他项目中获取最新的SNAPSHOT?

Wor*_*ker 44

另一个选项(我使用)是在pom.xml中包含以下内容.updatePolicy标记将强制maven始终使用此repo中的最新快照.

<repositories>
    <repository>
        <id>you-snapshots</id>
        <url>http://host/nexus/repos/snapshots</url>
        <snapshots>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <updatePolicy>always</updatePolicy>
        </releases>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

ps我总是在pom.xml中配置所有repos,因为我们使用了几个CI服务器并且很难配置它们(我很懒...)

有关settings.xml updatePolicy的文档供参考. The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or "never" (only if it doesn't exist locally).


Tim*_*Tim 15

使用

mvn -U, --update-snapshots

Forces a check for updated releases and snapshots on remote repository

  • @Strawberry:我没有看到"0.0.1-SNAPSHOT"如何成为"0.0.2-SNAPSHOT"或任何其他更高版本的任何合理解释. (3认同)

Pas*_*ent 14

关于依赖范围和SNAPSHOT依赖关系的几句话(引用依赖关系中介和冲突解决方案设计文档):

将SNAPSHOT版本纳入规范

除非作为显式边界包含,否则依赖性范围的解析不应解析为快照(开发版本).除非您明确使用新功能,否则无需针对开发代码进行编译,在该功能下,快照将成为版本规范的下限.由于版本被认为比它们所属的快照更新,如果找到它们,它们将被选择在旧快照上.

因此,要回答你的问题,使用快照与依赖范围的唯一方式就是为界,你将不会被自动设计获得更高的快照版本(这确实是有道理的).

就个人而言,我不喜欢使用依赖范围,因为我发现它可能导致构建可重现性问题并使构建更加脆弱.我不推荐他们.

以防万一,升级SNAPSHOT版本通常意味着您正在发布一些代码,maven发布插件提供了对此的支持(请参阅更新POM版本).


Mar*_*tin 8

Maven 有一个版本插件,允许您将pom更新为可见存储库中最新的最新快照.它通过检查您的pom并与远程存储库进行比较然后根据需要进行修改来实现此目的.

它是一个有用的工具,但我肯定希望看到一个等同于已弃用的LATEST选项.我发现这种依赖在持续集成场景中特别有用.

  • @PascalThivent:为什么? (11认同)
  • 我觉得这种依赖尤其有害*. (3认同)