sbt 0.11:使用公司maven存储库

时间:2012-02-02 15:54:23

标签: maven sbt

how do I get sbt to use a local maven proxy repository (Nexus)?所述,如何使用sbt 0.11.x来使用公司Maven存储库(排除其他存储库)?在github的新sbt wiki中没有提到ivyRepositories,所以我假设已接受的解决方案已经过时了。

3 个答案:

答案 0 :(得分:11)

第1步:按照Detailed Topics: Proxy Repositories上的说明进行操作,我已将其汇总并添加到下面:

  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]
    
  3. 将该文件保存在主目录中的.sbt目录中,或在sbt命令行中指定(您需要指定是否有disabled sharing):

    sbt -Dsbt.repository.config=<path-to-your-repo-file>
    
  4. 使用旧版本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 / {{1你定义它。这适用于sbt 0.13。
    3. 在您的构建文件中使用Global 解析程序为您的公司maven存储库 fullResolvers := Seq(而不是)resolvers ++=或其他你曾经使用过。
    4. 最后,请注意sbt启动程序脚本在读取resolvers :=文件时存在错误,因此如果您决定将常用的sbt命令行选项放在那里,请确保文件的最后一行以换行符(特别是Emacs可能无法确保这一点,除非配置为这样做)。

答案 1 :(得分:5)

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

将文件.sbtopts添加到项目根目录,其内容为:

-Dsbt.override.build.repos=true

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

答案 2 :(得分:3)

解压缩 sbt-launcher.jar 并将 sbt.boot.properties 文件复制到您选择的位置。更改启动脚本以使用此文件。在该文件中,将存储库部分更改为仅包含本地存储库和公司存储库。 Maven和Ivy之间的区别来自给定的模式(默认情况下,没有模式表示Maven模式)。

以下是一个例子:

[repositories]
  local
  corporate: http://inhouse.acme.com/releases/