我有一个sbt(Scala)项目,目前从Web上提取工件 . 我们希望转向一个可以缓存工件的企业标准化Nexus存储库 . 从Nexus文档中,我了解如何为Maven项目执行此操作 . 但是sbt显然使用了不同的方法 . (我知道Ivy会以某种方式参与其中,但我从未使用它,也不了解它是如何工作的 . )
如何告诉sbt和/或底层Ivy将所有依赖项用于企业Nexus存储库系统?我想要使用某种项目级配置文件的答案,以便我们的源存储库的新克隆将自动使用代理 . (即,在点目录中使用每个用户的配置文件进行捣乱是不可行的 . )
谢谢!
6 回答
第1步:按照Detailed Topics: Proxy Repositories中的说明进行操作,我已将其汇总并添加到下面:
(如果您使用的是Artifactory,则可以跳过此步骤 . )在公司Maven存储库中创建一个完全独立的Maven代理存储库(或组),以代理常 Spring 藤式存储库,例如以下两个重要的存储库:
http://repo.typesafe.com/typesafe/ivy-releases/
http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/
这是必需的,因为一些存储库管理器无法处理混合在一起的Ivy风格和Maven风格的存储库 .
repositories
,列出您的主要公司存储库以及您在步骤1中创建的任何额外存储库,格式如下所示:.sbt
目录中,或在sbt命令行中指定:Good news for those using older versions of sbt :尽管至少在sbt 0.12.0启动程序jar中,旧sbt版本的启动属性文件不包含所需的行(提及
repository.config
的行),如果你仍然适用于那些版本的sbt编辑这些文件以添加所需的行,并将它们重新打包到sbt 0.12.0启动程序jar中!这是因为该功能在启动器中实现,而不是在sbt本身中实现 . 据称sbt 0.12.0 Launcher 能够启动所有版本的sbt,直到0.7!步骤2:要确保未使用外部存储库,请从解析程序中删除默认存储库 . 这可以通过以下两种方式之一完成:
添加上面“详细主题”页面上提到的命令行选项
-Dsbt.override.build.repos=true
. 这将导致您在文件中指定的存储库覆盖任何sbt文件中指定的任何存储库 . 这可能仅适用于0.12及以上的版本 - 我还没有尝试过 .在您的构建文件中使用
fullResolvers := Seq(
解析程序为您的公司maven存储库)
,而不是resolvers ++=
或resolvers :=
或您以前使用的任何内容 .好的,在Mark Harrah的sbt邮件列表的帮助下,我有一个有效的答案 .
我的构建类现在看起来像以下(加上其他一些repos):
现在,如果我从我的机器的
.ivy2/cache
目录中删除Squeryl树,sbt会尝试使用适当的URL从Nexus树中获取它 . 问题解决了!您所需要的只是定义一个属性文件 sbt.boot.properties ,它允许您:
重新定义常 Spring 藤缓存位置(我需要它,因为它将成为我们roaming Windows profile的一部分,这在我们商店的磁盘空间中受到严重限制 . 请参阅Issue 74)
定义您想要的任何其他Maven回购
注意:此
sbt.boot.properties
文件的灵感来自:"Generalized Launcher" page of the sbt project中提到的那个 .
sbt-0.74
内发现的那个!我评论了任何外部Maven存储库定义,并添加了对我自己的Nexus Maven存储库的引用 .
定义一个sbt.bat包装器(in为了确保指定你的
sbt.boot.properties
),例如:你的sbt将从下载文件 only :
你的Nexus
您当地的Maven回购 .
刚刚在家中使用旧的Nexus opensource 1.6进行了测试,我运行了java 1.6,sbt07.4
这给了:
如果我在sbt.boot.properties文件中尝试一个有趣的值:
所以它确实限制了我定义的两个回购:
(我评论了其他一切:
local
,maven-local
,...)如果我评论所有存储库并为
sbt.boot.properties
中的scala版本添加一个有趣的值(2.7.9),我会得到(就像OP一样)如果我把2.7.7(虽然仍然有所有repo评论),是的,它不会产生错误:
But that's only because it already had downloaded scala2.8.0 during my previous tries.
如果我从
project/boot
目录中删除该库,那么它将抛出异常:编辑sbt_home / conf“sbtconfig.txt”中的配置文件
加两行
repo.properties的内容是
好吧,这已经让我烦恼了一段时间,所以我发现一个人在github上为maven编写了一个名为maven-sbt的SBT插件,所以你所要做的就是将它包含在你的插件项目中并使你的项目与maven.MavenDependencies和所有您的操作,例如更新和发布 - 本地工作与您当地的maven . 关于这一点的好处是,如果你像我一样,你的组织就是全部 . 所以,你们所有的lib都在你们当地的maven回购中,但是如果你出于某种原因首先用sbt构建,那么你们也开始在常 Spring 藤中获得一堆或者 jar . 多么浪费空间和时间,因为你仍然需要为你的maven构建获取它们 .
也就是说,我希望这可以内置到sbt中,所以我不需要将它添加到每个项目中 . 也许至少作为处理器 . 他在一件事情中提到我想将它添加到0.9但我无法找到它 .
我收到此错误是因为我在
~/.sbt/repositories
中有一个空白文件 . 将存储库添加到文件并删除文件都解决了问题 .