2012-02-02 53 views

回答

11

第1步:按照在Detailed Topics: Proxy Repositories的指示,这是我总结,并添加到下面:

  1. (如果您正在使用Artifactory的,你可以)创建一个完全独立的 Maven代理仓库(或组)在您的公司Maven仓库中,以代理常春藤风格仓库等这两个重要的o网元:

    因为一些仓库经理无法处理常春藤风格和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> 
    

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

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

  1. 添加上面详细主题页面中提到的命令行选项-Dsbt.override.build.repos=true。这将导致您在文件中指定的存储库覆盖任何sbt文件中指定的任何存储库。这可能只适用于sbt 0.12及以上,但我还没有尝试过。
  2. 与1具有相同的效果,您可以使用overrideBuildResolvers := true,其优点是您可以根据您定义的范围(项目/ ThisBuild/Global)来控制适用的项目。此功能适用于sbt 0.13。
  3. 使用fullResolvers := Seq(解析器(S)为您的企业Maven仓库)在你的build文件,而不是resolvers ++=resolvers :=或任何你曾经使用。

最后,需要注意的是,SBT启动程序脚本在读sbtopts文件中的错误,所以如果你决定把你常用的SBT命令行选项在那里,确保文件的最后一行在结束换行符(尤其是Emacs可能无法确保这一点,除非配置为这样)。

+0

我试图使用第2步中的选项2设置overrideBuildResolvers:= true在build.sbt中,但是这对我来说不起作用。设置时有什么需要特别注意的吗? – Ronald 2015-05-20 12:25:58

+0

使用Windows时,请注意sbt -Dsbt.override.build.repos = true会给你一个警告,并且该标志被忽略。你应该使用-D“sbt.override.build.repos = true”,我相信由于某些cmd魔法,需要双引号。 – 2016-08-10 07:24:51

3

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

下面是一个例子:

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

我试过了,但没有奏效。它甚至根本没有尝试公司仓库!也许这里有一些困惑。我希望默认使用公司存储库,而不必在'build.sbt'中指定它。 – 2012-02-07 15:54:37

+1

不会有任何困惑,@ HeikoSeeberger的答案应该完全按照您的要求进行:将您的公司资料库替换为Maven中心。 如果它不适合你,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本身相同的目录中。) – 2012-02-07 21:43:34

+0

我也试过了,但是不起作用。它肯定会读取我的自定义sbt.boot.properties,因为如果我输入语法错字,sbt将不会加载。如果我删除所有存储库,sbt将不会解析所需的工件。但是,当工件已经在Nexus repo中并且配置了sbt.boot.properties时,sbt仍然不会获得它! – 2012-02-26 20:01:37

5

为接受的答案的步骤2的替代(现在用SBT 0.13.1):

添加文件.sbtopts到项目的根目录与内容:

-Dsbt.override.build.repos=true 

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

+0

您也可以在步骤1中使用它,并在其中放入'-Dsbt.repository.config = <…>'config。这样,完整的回购配置可以在每个项目的基础上设置并添加到代码库中。 – F30 2017-03-31 17:15:29