sbt 0.11:使用公司maven存储库

Rob*_*een 9 maven sbt

如何使用sbt 0.11.x来使用公司Maven存储库(排除其他存储库),如我如何让sbt使用本地maven代理存储库(Nexus)中所述?ivyRepositories在github的新sbt wiki中没有提到,所以我假设已经过时的解决方案已经过时了.

Rob*_*een 11

步骤1:按照详细主题:代理存储库中的说明进行操作,我已将其汇总并添加到下面:

  1. (如果您使用Artifactory,则可以跳过此步骤.)在公司Maven存储库中创建一个完全独立的 Maven代理存储库(或组),以代理常春藤样式的存储库,例如以下两个重要的存储库:

    这是必需的,因为一些存储库管理器无法处理混合在一起的Ivy风格和Maven风格的存储库.

  2. 创建一个文件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]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将该文件保存在.sbt主目录中的目录中,或者在sbt命令行中指定它(您需要指定是否禁用了共享):

    sbt -Dsbt.repository.config=<path-to-your-repo-file>
    
    Run Code Online (Sandbox Code Playgroud)

对于那些使用旧版本的sbt的人来说是个好消息:尽管至少在sbt 0.12.0启动程序jar中,旧sbt版本的启动属性文件不包含所需的行(提到的行repository.config),它仍然可以工作对于那些版本的sbt,如果你编辑这些文件来添加所需的行,并将它们重新打包到sbt 0.12.0启动程序jar中!这是因为该功能在启动器中实现,而不是在sbt本身中实现.据称sbt 0.12.0发射器能够启动所有版本的sbt,直到0.7!

步骤2:要确保未使用外部存储库,请从解析程序中删除默认存储库.这可以通过以下三种方式之一完成:

  1. 添加-Dsbt.override.build.repos=true上面"详细主题"页面中提到的命令行选项.这将导致您在文件中指定的存储库覆盖任何sbt文件中指定的任何存储库.这可能仅适用于0.12及以上的版本 - 我还没有尝试过.
  2. 与1具有相同的效果,您可以使用overrideBuildResolvers := true,您可以根据您在其中定义的范围(项目/ ThisBuild/ Global)来控制适用的项目.这适用于sbt 0.13.
  3. 在构建文件中使用fullResolvers := Seq( 解析器作为公司maven存储库 ),而不是使用resolvers ++=或者resolvers :=使用过的任何内容.

最后,请注意sbt启动程序脚本在读取sbtopts文件时存在错误,因此如果您决定在其中放置常用的sbt命令行选项,请确保文件的最后一行以换行符结尾(特别是Emacs可能会失败)确保这一点,除非配置为这样做).


小智 5

接受答案的第2步的替代方案(使用sbt 0.13.1):

.sbtopts使用内容将文件添加到项目根目录:

-Dsbt.override.build.repos=true
Run Code Online (Sandbox Code Playgroud)

另一种方法是添加此行$SBT_HOME/conf/.sbtopts,但这会强制所有项目的设置.