Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SBT如何禁用特定groupid的常春藤缓存_Sbt - Fatal编程技术网

SBT如何禁用特定groupid的常春藤缓存

SBT如何禁用特定groupid的常春藤缓存,sbt,Sbt,我用SBT构建了几个Scala模块。其中一些模块(我称之为依赖模块)被发布到Artifactory,然后被顶级模块使用 对代码的所有更改都在单独的git分支中完成。当特性(或错误修复)完成时,该分支将在Jenkins中编译,然后部署到测试实例并交给QA团队 因此,在从属模块中可能会有几个具有不同代码的git分支 问题是Ivy在本地缓存这些模块,因此顶层模块可能会与来自不同分支(从本地缓存获取)的从属模块一起构建 我已经尝试将changing()指令添加到build.sbt中的依赖项规范中 在这种

我用SBT构建了几个Scala模块。其中一些模块(我称之为依赖模块)被发布到Artifactory,然后被顶级模块使用

对代码的所有更改都在单独的git分支中完成。当特性(或错误修复)完成时,该分支将在Jenkins中编译,然后部署到测试实例并交给QA团队

因此,在从属模块中可能会有几个具有不同代码的git分支

问题是Ivy在本地缓存这些模块,因此顶层模块可能会与来自不同分支(从本地缓存获取)的从属模块一起构建

我已经尝试将
changing()
指令添加到
build.sbt
中的依赖项规范中

在这种情况下,Ivy忽略了本地缓存,每次都去Artifactory下载POM文件。然后它解析POM文件,但得出结论,它在本地缓存中具有该版本的jar文件,并从本地缓存而不是从Artifactory中获取jar文件。这不是我想要的

因为此时分支中的代码还没有集成到主分支中,所以不同的功能分支具有相同的版本号,但代码不同是完全有效的


有没有办法告诉Ivy(通过SBT)忽略某个groupid的本地缓存?或者至少一个依赖项?

如果要对依赖项模块使用版本控制,则每个代码库更改必须生成不同的版本。Ivy和maven期望,一旦工件以特定版本发布,它将永远保持不变。这就是他们使用缓存文件的原因。如果要在每次编译时从存储库下载新版本,则应在从属模块版本号(例如:dep-module-1.1.1-SNAPSHOT)中添加-SNAPSHOT后缀。

是否尝试将版本标记为快照?添加快照与向依赖项添加changing()相同,如
def appDependencies=Seq(“com.foo”)%“foo api”%“1.0”正在更改(),…
。这迫使Ivy在每次编译时都从存储库中获取POM文件,但它没有获取jar,正如在原始帖子中所解释的那样。您是否尝试过按照官方SBT文档中概述的故障排除步骤进行故障排除?您的意思是明确地运行更新?不,因为我不确定并行构建会发生什么案例。我通过使用sbt dirty money插件解决了眼前的问题,该插件在编译开始之前从ivy缓存中删除我的com.foo工件。这很好,因为ivy每次都要下载工件,因为它们不在缓存中。但是,如果我在Jenkins中使用并行构建,我不确定会发生什么。我很抱歉目前只使用一个执行器,所以这不可能发生。如果我尝试明确地使用update,我想我也会遇到同样的问题。据我所知,您的大多数问题都是由于没有正确地对依赖的工件进行版本控制。如果您的并发构建要求相同的工件版本,但期望不同的内容,那么这是一个问题em.您可以采用一些自动增量版本编号方案。这意味着您必须将build.sbt内容与最新的工件版本同步,但这会使并发版本更安全。它们没有明显的版本控制,因为它们位于不同的开发环境中git分支。每个分支都有自己的世界,内部有不同的版本控制。但不考虑其他分支。这就是开发分支应该是的。同步版本号是可能的,但要付出可能的人为错误的代价,我非常希望避免。