SBT插件不使用自定义解析器

时间:2015-12-02 13:50:58

标签: scala sbt

我正在尝试将sbt-native-packager插件添加到我的sbt版本中。出于多种原因,我不希望我的构建依赖于默认的sbt存储库,我已阻止在网络上访问它们,并通过以下方式向我的<project_home>/project/plugins.sbt添加了一个解析器:

resolvers += "local-repo-plugins" at "file:///" + baseDirectory.value + "/libs/repo/"
resolvers += Resolver.url("my-ivy-proxy-plugins", url("http://fullURLForRepo/"))(Patterns("[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]") )

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.4")

我可以确认它在我的常春藤代理中托管的插件,但这甚至不是问题,因为sbt仍在尝试转到默认的回购:

[info] Resolving com.typesafe.sbt#sbt-native-packager;0.7.4 ...
[error] Server access Error: Connection timed out url=https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-native-packager/scala_2.10/sbt_0.13/0.7.4/ivys/ivy.xml
[error] Server access Error: Connection timed out url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-native-packager/scala_2.10/sbt_0.13/0.7.4/ivys/ivy.xml
[error] Server access Error: Connection timed out url=https://repo1.maven.org/maven2/com/typesafe/sbt/sbt-native-packager_2.10_0.13/0.7.4/sbt-native-packager-0.7.4.pom

此外,这个完全相同的自定义解析器在解析库依赖关系时,在我的<project_home>/build.sbt上工作得很好(包括一个基于本地文件系统的解析器)。

虽然我理解为什么我的项目构建中使用的解析器与我<project_home>/project/plugins.sbt中使用的解析器不同,但我对我刚才描述的问题有几个问题:

  1. 这是为插件定义解析器的正确方法吗?只需使用该语法将它们添加到<project_home>/project/plugins.sbt
  2. 如果问题1)的答案是肯定的:在定义这些解析器时有没有办法避免冗余?例如我在<project_home>/build.sbt
  3. 中定义了完全相同的内容
  4. 最重要的是:为什么sbt build不使用我在解析器中指定的ivy代理来检索sbt-native-packager插件?

3 个答案:

答案 0 :(得分:2)

  1. 是的,这是为插件定义解析器的正确方法

  2. 这实际上非常棘手:您正在尝试在插件构建和构建之间共享设置。这些是&#34;分开&#34;从sbt的角度来看项目。有一些解决方案使用项目参考来从构建中获取对插件构建设置的访问权限,但它们是quite tricky。如果这是一个公司环境,您仍然无法访问默认存储库,那么使用自定义sbt.boot.properties可能会更容易。你可以从default file开始,为0.13.x 更改sbt.boot.properties应该可以从Server access errors

  3. 中获取
  4. 您提供的日志中没有任何内容表明该插件无法从您的代理解析,只是在尝试访问官方存储库时超时。使用默认的sbt.boot.properties,sbt将尝试按定义解析器的顺序解析伪像:

    local
    typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
    maven-central
    sonatype-snapshots: https://oss.sonatype.org/content/repositories/snapshots
    

    然后在.sbt目录中的任何<project_home>/project/文件中找到任何解析器。据我所知,sbt文件按字母顺序进行评估,并且按照它们在每个文件中出现的顺序添加解析器。

答案 1 :(得分:1)

我认为你们都错了,它应该是这样的:

my_project / project / plugins.sbt 应该有:

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.4")

my_project / project / project / build.sbt 应该有:

resolvers += ...

它们是两种不同的构建定义......

答案 2 :(得分:0)

似乎文档尚未更新,要求您将resolvers放入plugins.sbt中。将resolvers ++= Seq("Artima Maven Repository" at "http://repo.artima.com/releases")移至build.sbt可解决此问题。