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

Scala SBT插件不使用自定义解析器,scala,sbt,Scala,Sbt,我正在尝试将插件添加到我的sbt构建中。出于许多原因,我不希望我的构建依赖于默认的sbt存储库,我已阻止了对它们的网络访问,并以以下方式向我的/project/plugins.sbt添加了一个解析器: resolvers += "local-repo-plugins" at "file:///" + baseDirectory.value + "/libs/repo/" resolvers += Resolver.url("my-ivy-proxy-plugins", url("http://f

我正在尝试将插件添加到我的sbt构建中。出于许多原因,我不希望我的构建依赖于默认的sbt存储库,我已阻止了对它们的网络访问,并以以下方式向我的
/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")
我可以确认它托管在我的ivy代理中的插件,但这甚至不是问题,因为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
此外,在我的
/build.sbt
上,当解析库依赖项时,这个完全相同的自定义解析器工作得很好(与其他几个解析器一起,包括一个基于本地文件系统的解析器)

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

  • 这是定义插件解析程序的正确方法吗?只是用这种语法将它们添加到
    /project/plugins.sbt
  • 如果问题1)的答案是肯定的:在定义这些解析器时,有没有办法避免冗余?e、 g.我在
    /build.sbt
  • 最重要的是:为什么sbt构建没有使用解析程序中指定的我的ivy代理来检索sbt本机packager插件
  • 是的,这是为插件定义解析器的正确方法

  • 这实际上相当棘手:您试图在插件构建和构建之间共享设置。从sbt的角度来看,这些是“独立”的项目。有一些解决方案使用projectref从构建中获得对插件构建设置的访问权,但它们是。如果这是一个无论如何都无法访问默认存储库的公司环境,那么使用自定义
    sbt.boot.properties
    可能会更容易。您可以从0.13.x的 更改
    sbt.boot.properties
    应该可以避免
    服务器访问错误

  • 您提供的日志中没有任何内容表明无法从您的代理解析插件,只是它没有尝试访问官方存储库。使用默认的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
    
    然后在
    /project/
    目录中的任何
    .sbt
    文件中找到任何解析器。据我所知,
    sbt
    文件是按字母顺序计算的,解析器是按它们在每个文件中出现的顺序添加的


  • 我想你们都搞错了,应该是这样的:

    my_project/project/plugins.sbt应具有:

    addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.4")
    
    resolvers += ...
    
    和my_project/project/project/build.sbt应具有:

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

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

    文档似乎还没有更新,它们要求您将
    解析器
    放入
    插件.sbt
    。移动
    resolvers++=Seq(“Artima Maven存储库”at“http://repo.artima.com/releases“
    to
    build.sbt
    解决了这个问题。

    我接受这个答案,因为即使它没有直接为我的问题提供解决方案,它也正确地指出了我的问题本身的问题,由于粘贴的日志不完整,也不能说明我正在解释的问题。这本身就是一个很好的暗示,说明我一开始忽略了一些事情。此外,本答案中的信息和链接信息丰富,非常有用(特别是第二点)。谢谢对不起,我帮不了你什么忙,希望你能解决你的问题。请回来,并张贴一个更好的答案,一旦你这样做:)(我想你可以改变接受的答案)这不是真的。SBT是递归的,所以构建本身是一个项目,其解析器是可定制的。我在回答之前对它进行了测试,这是它对我有效的唯一方式。我并不是说你提到的不起作用。但是您也暗示了
    解析器不应该在
    plugins.sbt
    中,它本质上应该是相同的(将它放在
    项目/project/build.sbt
    项目/plugins.sbt
    下)。