【发布时间】:2012-02-25 06:56:13
【问题描述】:
如how do I get sbt to use a local maven proxy repository (Nexus)? 中所述,如何将企业 Maven 存储库与 sbt 0.11.x 一起使用(不包括其他存储库)?在 github 的新 sbt wiki 中没有提到 ivyRepositories,所以我假设接受的解决方案已经过时了。
【问题讨论】:
如how do I get sbt to use a local maven proxy repository (Nexus)? 中所述,如何将企业 Maven 存储库与 sbt 0.11.x 一起使用(不包括其他存储库)?在 github 的新 sbt wiki 中没有提到 ivyRepositories,所以我假设接受的解决方案已经过时了。
【问题讨论】:
第 1 步:按照Detailed Topics: Proxy Repositories 的说明进行操作,我已将其总结并添加到以下内容:
(如果您使用 Artifactory,则可以跳过此步骤。)在您的公司 Maven 存储库上创建一个完全独立的 Maven 代理存储库(或组),以代理 ivy-style 存储库,例如这两个重要的存储库:
这是必需的,因为某些存储库管理器无法处理混合在一起的 Ivy 风格和 Maven 风格的存储库。
创建一个文件repositories,列出您的主要公司存储库以及您在步骤 1 中创建的任何额外存储库,格式如下:
[repositories]
my-maven-proxy-releases: http://repo.example.com/maven-releases/
my-ivy-proxy-releases: http://repo.example.com/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
要么将该文件保存在主目录内的 .sbt 目录中,要么在 sbt 命令行中指定它(如果有 disabled sharing,则需要指定):
sbt -Dsbt.repository.config=<path-to-your-repo-file>
对于那些使用旧版本 sbt 的人来说是个好消息:尽管至少在 sbt 0.12.0 启动器 jar 中,旧 sbt 版本的启动属性文件不包含所需的行 (提到repository.config)的那个,如果您编辑这些文件以添加所需的行并将它们重新打包到sbt 0.12.0启动器jar中,它仍然适用于那些版本的sbt!这是因为该功能是在启动器中实现的,而不是在 sbt 本身中实现的。并且 sbt 0.12.0 启动器声称能够启动所有版本的 sbt,直接回到 0.7!
第 2 步:为确保未使用外部存储库,请从解析器中删除默认存储库。这可以通过以下三种方式之一完成:
-Dsbt.override.build.repos=true。这将导致您在文件中指定的存储库覆盖在任何 sbt 文件中指定的任何存储库。不过,这可能仅适用于 sbt 0.12 及更高版本 - 我还没有尝试过。overrideBuildResolvers := true,好处是可以控制适用的项目,具体取决于你定义的范围(一个项目/ThisBuild/Global) in. 这在 sbt 0.13 中有效。fullResolvers := Seq( 解析器 ),而不是resolvers ++= 或resolvers := 或您以前使用的任何东西。最后,请注意 sbt 启动器脚本在读取 sbtopts 文件时存在错误,因此如果您决定将常用的 sbt 命令行选项放在那里,请确保文件的最后一行以换行符结尾(特别是 Emacs 可能无法确保这一点,除非配置为这样做)。
【讨论】:
已接受答案的第 2 步的替代方案(我正在使用 sbt 0.13.1):
将文件.sbtopts添加到项目根目录,内容如下:
-Dsbt.override.build.repos=true
另一种选择是在$SBT_HOME/conf/.sbtopts 中添加这一行,但这会强制所有项目的设置。
【讨论】:
-Dsbt.repository.config=<…> 配置放入其中。这样,可以在每个项目的基础上设置完整的 repo 配置并将其添加到代码存储库中。
解压 sbt-launcher.jar 并将 sbt.boot.properties 文件复制到您选择的位置。更改启动脚本以使用此文件。在文件中,将 repositories 部分更改为仅包含您的本地存储库和公司存储库。 Maven 和 Ivy 的区别来自于给定的模式(没有模式默认是 Maven 模式)。
这是一个例子:
[repositories]
local
corporate: http://inhouse.acme.com/releases/
【讨论】:
build.sbt 中指定它。
sbt.boot.properties 文件。如前所述,您必须修改 sbt 启动脚本以告诉 sbt 使用修改后的文件: java -Dsbt.boot.properties=sbt.boot.properties -jar dirname $0/sbt-launch-0.11.2.jar "$ @" (假设你把修改后的sbt.boot.properties和sbt本身放在同一个目录下。)