假设我有一个带有以下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
Pas*_*ent 14
关于依赖范围和SNAPSHOT依赖关系的几句话(引用依赖关系中介和冲突解决方案设计文档):
将SNAPSHOT版本纳入规范
除非作为显式边界包含,否则依赖性范围的解析不应解析为快照(开发版本).除非您明确使用新功能,否则无需针对开发代码进行编译,在该功能下,快照将成为版本规范的下限.由于版本被认为比它们所属的快照更新,如果找到它们,它们将被选择在旧快照上.
因此,要回答你的问题,使用快照与依赖范围的唯一方式就是为界,你将不会被自动设计获得更高的快照版本(这确实是有道理的).
就个人而言,我不喜欢使用依赖范围,因为我发现它可能导致构建可重现性问题并使构建更加脆弱.我不推荐他们.
以防万一,升级SNAPSHOT版本通常意味着您正在发布一些代码,maven发布插件提供了对此的支持(请参阅更新POM版本).
归档时间: |
|
查看次数: |
53924 次 |
最近记录: |