如何使用sbt 0.11.x来使用企业Maven仓库(排除其他仓库),如how do I get sbt to use a local maven proxy repository (Nexus)?中所述?在github的新sbt wiki中没有提及ivyRepositories
,所以我假设接受的解决方案已过时。sbt 0.11:使用企业maven仓库
回答
第1步:按照在Detailed Topics: Proxy Repositories的指示,这是我总结,并添加到下面:
(如果您正在使用Artifactory的,你可以)创建一个完全独立的 Maven代理仓库(或组)在您的公司Maven仓库中,以代理常春藤风格仓库等这两个重要的o网元:
- http://repo.typesafe.com/typesafe/ivy-releases/
- http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/
因为一些仓库经理无法处理常春藤风格和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及以上,但我还没有尝试过。 - 与1具有相同的效果,您可以使用
overrideBuildResolvers := true
,其优点是您可以根据您定义的范围(项目/ThisBuild
/Global
)来控制适用的项目。此功能适用于sbt 0.13。 - 使用
fullResolvers := Seq(
解析器(S)为您的企业Maven仓库)
在你的build文件,而不是resolvers ++=
或resolvers :=
或任何你曾经使用。
最后,需要注意的是,SBT启动程序脚本在读sbtopts
文件中的错误,所以如果你决定把你常用的SBT命令行选项在那里,确保文件的最后一行在结束换行符(尤其是Emacs可能无法确保这一点,除非配置为这样)。
拆开SBT-launcher.jar和sbt.boot.properties文件复制到您选择的位置。将启动脚本更改为使用此文件。在该文件中,将存储库部分更改为仅包含您的本地存储库和公司存储库。 Maven和Ivy之间的区别来自给定的模式(默认情况下,没有模式意味着Maven模式)。
下面是一个例子:
[repositories]
local
corporate: http://inhouse.acme.com/releases/
我试过了,但没有奏效。它甚至根本没有尝试公司仓库!也许这里有一些困惑。我希望默认使用公司存储库,而不必在'build.sbt'中指定它。 – 2012-02-07 15:54:37
不会有任何困惑,@ 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
我也试过了,但是不起作用。它肯定会读取我的自定义sbt.boot.properties,因为如果我输入语法错字,sbt将不会加载。如果我删除所有存储库,sbt将不会解析所需的工件。但是,当工件已经在Nexus repo中并且配置了sbt.boot.properties时,sbt仍然不会获得它! – 2012-02-26 20:01:37
为接受的答案的步骤2的替代(现在用SBT 0.13.1):
添加文件.sbtopts
到项目的根目录与内容:
-Dsbt.override.build.repos=true
另一种方法是添加此行$SBT_HOME/conf/.sbtopts
,但这会强制所有项目的设置。
您也可以在步骤1中使用它,并在其中放入'-Dsbt.repository.config = <…>'config。这样,完整的回购配置可以在每个项目的基础上设置并添加到代码库中。 – F30 2017-03-31 17:15:29
- 1. SBT:发布企业的Nexus仓库擅自
- 2. 使用企业库
- 3. 企业中的GitHub仓库叉
- 4. sbt 0.11.2:只使用企业nexus存储库的依赖关系
- 5. 使用SBT安装Maven库
- 6. 使用微软企业库
- 7. 要使用企业库吗?
- 8. 异常使用企业库
- 9. 使用企业库计数(*)
- 10. 使用Maven 3.3.9通过企业代理
- 11. 使用本地Maven仓库
- 12. 企业库SqlCacheDependency
- 13. 企业库:
- 14. 企业库slidingExpirationTime
- 15. 企业库ValidatorFactory
- 16. Force sbt 0.11运行测试
- 17. 斯卡拉SBT和企业代理 - SunCertPathBuilderException
- 18. Maven仓库
- 19. TinyRadius Maven仓库
- 20. Maven Git仓库
- 21. Maven仓库
- 22. 从maven使用sbt
- 23. 拥有maven仓库而不使用任何仓库管理器
- 24. 如何让sbt在本地maven仓库中寻找scala dist?
- 25. WCF +企业库+ ValidationFault
- 26. CacheCallHandler企业库Contrib?
- 27. 企业库记录
- 28. 微软企业库
- 29. App.config和企业库
- 30. NLog到企业库
我试图使用第2步中的选项2设置overrideBuildResolvers:= true在build.sbt中,但是这对我来说不起作用。设置时有什么需要特别注意的吗? – Ronald 2015-05-20 12:25:58
使用Windows时,请注意sbt -Dsbt.override.build.repos = true会给你一个警告,并且该标志被忽略。你应该使用-D“sbt.override.build.repos = true”,我相信由于某些cmd魔法,需要双引号。 – 2016-08-10 07:24:51