如何在Gradle中获取依赖项的最新快照而不更改版本?

28

我建立了一个自己的库,并将其部署在Nexus仓库上。该快照经常更改,因此并不是每个更改都有一个新的版本号。我的问题是,在使用这个库的项目中,我无法获取最新的代码而不改变版本号。我尝试过"--refresh-dependencies",也尝试通过删除"\caches\modules-2\files-2.1\my.dependency"下此依赖项的文件夹来清除缓存中的依赖项。


我还尝试了以下方法:

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

有人有想法如何强制 Gradle 下载最新的依赖状态,即使版本号没有改变吗?


可能是重复的问题,建议从远程仓库使用最新的快照版本。参考链接 - MartinTeeVarga
1
不,我尝试过了,但它没有起作用。但我忘了在我的帖子中说这件事。我会进行编辑。 - n00bst3r
为了获得最佳结果,您应该在构建脚本中包含所有相关部分。 - MartinTeeVarga
2个回答

59

首先确保您的快照具有正确的版本格式:

dependencies {
    compile group: "groupId", name: "artifactId", version: "1.0-SNAPSHOT"
}

如果您没有使用-SNAPSHOT后缀(或者您没有使用Maven存储库),则必须指示您的依赖项正在更改:

如果您未使用-SNAPSHOT后缀(或不使用Maven存储库),则需要指明您的依赖项正在变化:

dependencies {
    compile group: "groupId", name: "artifactId", version: "1.0", changing: true
}

然后你需要告诉Gradle不要缓存变化的依赖项,否则它只会每24小时更新它们:

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

如果您也将依赖项配置为动态版本,如下所示:

dependencies {
    compile group: "groupId", name: "artifactId", version: "1+", changing: true
}

然后你需要添加:

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
    resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
}

请注意,这可能会大大减缓您的构建速度。

如果这没起到作用,请删除.gradle目录中的相关部分,或者直接再次删除整个目录。

如果这些都没有帮助,恐怕这将是您存储库端的问题。


1
@Thunderforge 确实,我应该更新答案。下次请随意编辑以纠正任何误解,谢谢。 - MartinTeeVarga
在最后一个代码块中,cacheChangingModulesFor 为什么使用秒作为单位,而 cacheDynamicVersionsFor 则使用分钟作为单位?或者这两个时间单位都可以使用吗? - Thunderforge
2
@n00bst3r,请检查您的存储库配置。mavenLocal()需要在您的内部存储库管理器下方才能找到更新的快照。 - S T
2
在上面的回答中,此行表示(或者您没有使用Maven存储库),那么对于非Maven存储库,它不起作用吗?我们正在使用jfrog artifactory并遵循:0.0.1-SNAPSHOT的约定,但仍然无法从最新版本缓存中获取gradle。是否有任何解决方案? - rhozet
2
我在使用Jfrog仓库时遇到了相同的问题。 - Elia Rohana
显示剩余4条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接