Maven自动SNAPSHOT更新

时间:2010-03-01 20:46:00

标签: maven-2 maven

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

<groupId>com.mine</groupId>
<artifactId>coreJar</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>

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

<dependencies> 
    <dependency>
        <groupId>com.mine</groupId>
        <artifactId>coreJar</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    ...
<dependencies> 

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

我理解you can specify versions,例如:

[1.5,)

但我永远无法使用“-SNAPSHOT”:

[0.0.1,)-SNAPSHOT // Doesn't work!

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

7 个答案:

答案 0 :(得分:43)

另一个选项(我使用)是在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>

P.S。我总是在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).

答案 1 :(得分:14)

使用

  

mvn -U, --update-snapshots

     

Forces a check for updated releases and snapshots on remote repository

答案 2 :(得分:13)

关于依赖范围和SNAPSHOT依赖关系的几句话(引用Dependency Mediation and Conflict Resolution设计文档):

  

将SNAPSHOT版本纳入规范

     

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

所以,为了回答你的问题,使用带有依赖范围的SNAPSHOT的唯一方法是作为边界,你不会通过设计自动获得更高的SNAPSHOT版本(真的有意义)。

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

以防万一,升级SNAPSHOT版本通常意味着您正在发布一些代码,maven发布插件为此提供支持(请参阅Updating POM Versions)。

答案 3 :(得分:8)

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

这是一个有用的工具,但我肯定希望看到与已弃用的LATEST选项相当的东西。我发现这种依赖在持续集成场景中特别有用。

答案 4 :(得分:3)

使用mvn install -U 你必须使用它来强制maven获取最新的快照

答案 5 :(得分:1)

这是

<version>[0.0-SNAPSHOT,)</version>

答案 6 :(得分:0)

如果您想更新Eclipse中的SNAPSHOT版本(使用m2e / m2eclipse时),请右键单击受影响的项目,然后选择“Maven” - &gt; “更新项目......” - &gt; “确定”(所选项目导致问题)。

相关问题