(SBT)如何禁用默认解析程序并仅使用公司内部解析程序?

时间:2013-10-25 08:05:42

标签: scala sbt nexus artifactory

我们希望使用公司内部常春藤/ maven存储库(artifactory)来提高解析和下载jar文件的速度,并且我们还希望使用它来在组织中的不同团队之间交换二进制jar文件。

我知道我们可以通过设置~/.repositories

来强制SBT通过代理
[repositories]
  local
  my-ivy-proxy-releases: http://repo.alpinenow.com/artifactory/repo/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  my-maven-proxy-releases: http://repo.alpinenow.com/artifactory/repo/

然后使用-Dsbt.override.build.repos=true启动SBT。这种方法对我有用。

然而,要求所有开发人员以这种方式设置是很麻烦的。我们想知道我们是否可以在Build.scala和plugin.sbt中完全覆盖默认的解析器而无需额外的配置。

到目前为止,我已经尝试了以下方法但没有成功。

1)在Build.scala和plugin.sbt中,我添加了

resolvers := "Local Repo" at "http://repo.alpinenow.com/artifactory/repo/",

externalResolvers := Seq(Resolver.url("Local Repo", url("http://repo.alpinenow.com/artifactory/repo"))(Resolver.ivyStylePatterns)),

但它仍然从typesafe和maven1下载jar。

2)然后我决定将存储库文件放入项目文件夹,并尝试直接在plugin.sbt中添加java选项,并使用

添加Build.scala
System.setProperty("-Dsbt.override.build.repos", "true"),

System.setProperty("-Dsbt.repository.config", "project/repositories"),

但它仍然无效。我很好奇SBT获得解析器的java选项,因为很明显,它是在plugin.sbt和Build.scala之前。

有什么想法吗?

感谢。

DB Tsai

3 个答案:

答案 0 :(得分:2)

如果您偏离sbt-extras shell脚本作为默认启动器脚本的替代品,我猜您可以通过设置~/.repositories并添加-Dsbt.override.build.repos=true轻松修改该脚本。然后,您需要做的就是确保您的开发人员使用该脚本。

答案 1 :(得分:0)

我总是在SVN / GIT中添加SBT构建作为我的回购的一部分,关闭代码。然后我没有这样的问题。

它的成本约为1MB,因此非常便宜并且解决了很多问题。所有开发者使用相同的构建工具即使我尝试创建Continues Integration或更高级的Continues Delivery流程,所有SBT配置也将在我的SCM中配置得很好。我将得到一个真实的来源:)

答案 2 :(得分:0)

项目级别

根据文档,我们应该使用externalResolvers
https://www.scala-sbt.org/release/docs/Library-Dependencies.html#Overriding+default+resolvers

externalResolvers := Seq(
  "Local Repo" at "http://repo.alpinenow.com/artifactory/repo/",
  // some more internal Nexus repositories
)

插件级别

对于project之类的插件,您还必须在project/resolvers.sbt文件夹中进行此操作。

全球SBT级别

如果您还希望SBT可以自行从特定存储库中进行解析,则需要按照以下说明进行操作: https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html