我有一个项目,使用gradle作为构建工具,在intellij中使用SNAPSHOT依赖。
问题在于,intellij使用的SNAPSHOT已经过时了。
当我在命令行上构建项目时
gradle build or
gradle clean build --refresh-dependencies
在命令行上,可以获取最新的依赖项。我也设置了我的grade文件,使其始终下载快照依赖项,根据这个答案。
如何强制Intellij下载所有依赖项?
我有一个项目,使用gradle作为构建工具,在intellij中使用SNAPSHOT依赖。
问题在于,intellij使用的SNAPSHOT已经过时了。
当我在命令行上构建项目时
gradle build or
gradle clean build --refresh-dependencies
在IntelliJ 2017.2中,您可以在Gradle工具窗口中右键单击项目名称,然后从上下文菜单中选择刷新依赖项。
这将刷新所有依赖项,不仅限于SNAPSHOTS,因此可能需要一些时间。我不知道其他版本的IntelliJ是否也具有此功能。
我遇到了一些非常棘手的快照问题,你可以尝试以下几个选项:
configurations.all {
resolutionStrategy.cacheDynamicVersionsFor 4, 'hours'
resolutionStrategy.cacheChangingModulesFor 4, 'hours'
}
这个配置更改是一个最后的选择,应该谨慎使用。它基本上告诉Gradle更频繁地刷新本地缓存。在进行这些更改后,应单击IntelliJ Gradle刷新按钮。gradle clean build --refresh-dependencies
? - elect在Gradle 6+中,默认情况下快照是“可变的”。因此,不再需要设置 changing = true
。但您仍然需要将 resolutionStrategy.cacheChangingModulesFor
设置为0秒。
默认情况下,Gradle会缓存更改的模块24小时。我们可以通过在构建脚本中标记这些为'changing'来告诉Gradle刷新或重新下载依赖项。
请按以下步骤操作:
步骤#1:通过将cacheChangingModulesFor
属性的值设置为0秒,告诉Gradle不要缓存更改的模块:
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
步骤 #2: 标记需要刷新或重新下载的依赖项,作为更改的模块:
dependencies {
implementation("com.howtoprogram.buysell:payment-api:0.0.1-SNAPSHOT") {
changing = true
}
}
configurations.all { resolutionStrategy { cacheChangingModulesFor(60, TimeUnit.SECONDS) } }
来解决这个问题。 - Jilles van Gurp确保IntelliJ添加所有依赖项的最简单方法是使项目缓存失效并重新启动。重新加载项目需要约1分钟时间。
INTELLIJ IDE
File -> Invalidate Caches/Restart...
现在,如果要确保使用最新的快照版本,则必须在 gradle.build 文件中指定所使用的依赖项版本。
通常,在大多数存储库中没有“latest”锚定版本。您只需查看并确定最新版本即可。
理论上,如果您知道发布日期和版本控制系统,可以编写 Groovy 函数返回依赖项 URL 并将其传递给 implementation。
def getLatestVersion(){
...build version string
return version //As string
}
implementation getLatestVersion()
即使您参考了CI/CD管道,在任何超出您控制范围的情况下进行更改,也不建议这样做。