Gradle无法更新快照依赖项。

6
我有一个Gradle项目,依赖于另一个Gradle项目。依赖项已发布到我们的内部Nexus服务器,并且可以很好地解析。

一旦依赖项被本地缓存,除非我传递 --refresh-dependencies 参数给 Gradle 命令(或手动从缓存中删除),否则无法刷新它。

在搜索了互联网之后,我发现有很多人都有同样的问题,建议将依赖标记为 changing(尽管这不是必须的,因为从名称 -SNAPSHOT 中也可以隐含),并添加以下内容:

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

然而这对我不起作用,它总是使用缓存版本,直到gradle默认的24小时到期,然后重新下载。

有没有人知道我还缺少什么,或者如何诊断gradle正在做什么以及为什么它不去nexus下载新版本?


1
好的,--refresh-dependencies选项正是为了这个目的而存在的。 - Henry
但是这会刷新所有依赖项,而不仅仅是 SNAPSHOTs,因此这不是我想要做的,因为它使缓存失去意义。 - DaveJohnston
将依赖项明确标记为“changing”是否有帮助? compile('groupId:artifactId:X.X.X-SNAPSHOT'){ changing = true } - Alpar
1
不,这对我的情况没有帮助。 - DaveJohnston
这应该就能正常运行。您可以提供相关的依赖声明吗?同时尝试使用“-i”选项以获取更多关于底层操作的信息。 - Benjamin Muschko
1个回答

18

经过一些尝试和错误,我发现功能无法按预期工作的原因是因为我们使用了spring-boot插件。 spring-boot插件使用其自己的依赖管理插件,该插件具有自己的更改模块配置:

dependencyManagement {
    resolutionStrategy {
        cacheChangingModulesFor 0, 'seconds'
    }
}
将此代码片段添加到gradle文件中,可以强制更改模块始终被下载。

1
这对我来说是救命稻草。我们之前使用的是SNAPSHOT构建,刷新依赖时只能看到要下载的二进制jar文件而不是源码jar文件。现在它完美地工作了。谢谢! - sutanu dalui
上帝保佑你,我花了很多时间来解决这个问题。 - Peter S.

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