使用.ivy2缓存的副本作为SBT解析程序源

时间:2016-01-05 19:36:53

标签: scala sbt ivy

我正在尝试打包一些内部工件以供SBT使用。在大多数情况下,我只会使用libs目录,但有多个项目共享相同的工件。

我一直在尝试使用SBT生成的目录结构作为这个小型存储库的基础。它将工件存储在.ivy2中,如下所示:

.ivy2/cache/[org-with-dots]/[module]/[artifact]-[version].[ext]

我已将cache下需要的内容复制到自己的文件夹中,然后在SBT中尝试了以下模式无效:

resolvers += "cache" at "file:/../ivy-cache"
resolvers += Resolver.file("cache", file("../ivy-cache"))
resolvers += Resolver.file("cache", file("../ivy-cache"))(Resolver.ivyStylePatterns)
resolvers += Resolver.file("cache", file("../ivy-cache"))(Patterns("[organization]/[module]/[artifact]-[revision].[ext]"))

这些都不起作用。最接近的是最后一个,但组织用斜线而不是点。 Resolver.ivyStylePatterns组织中使用了点,但预计会使用名为ivys的文件夹。

所以我有两个问题:

  1. 我是否应该采取其他措施来捕获这些本地托管的工件?我没有建立它们,所以publish是不可取的。
  2. 有没有办法在组织组件中从/.替换字符串来指定上面我想要的模式?

2 个答案:

答案 0 :(得分:2)

找到答案,Pattern有一个apply重载,它的第一个参数带有一个布尔参数。当true使用使用斜杠分隔组件的Maven样式组织字符串时,false使用常春藤样式(点)时。

这是有效的(SBT 0.3.9):

resolvers += Resolver.file("cache", file("../ivy-cache"))(Patterns(false,"[organization]/[module]/[artifact]-[revision].[ext]"))

PS:如果某人提供了更好的工作流程,我会接受这个答案......

答案 1 :(得分:1)

首先,常春藤缓存有不同的文件系统布局,这可能会解释您在sbt中使用模式匹配时遇到的问题

其次(更重要的是)常春藤缓存不是用作构建所依赖的文件的权威副本。例如,可以清除缓存(实际上常春藤包含一个command,完全相同)。

与以下问题相关: