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

djs*_*lla 6 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")
Run Code Online (Sandbox Code Playgroud)

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

[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
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 这是为插件定义解析器的正确方法吗?只是将它们添加到<project_home>/project/plugins.sbt具有该语法的?
  2. 如果问题1)的答案是肯定的:在定义这些解析器时是否有任何方法可以避免冗余?例如,我已经完全定义了相同的<project_home>/build.sbt
  3. 最重要的是:为什么sbt构建不使用我在解析器中指定的常春藤代理来检索sbt-native-packager插件?

Jea*_*ean 3

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

  2. 这实际上非常棘手:您正在尝试在插件构建和构建之间共享设置。从 sbt 的角度来看,这些是“独立”的项目。有一些解决方案使用项目引用来从构建中访问插件构建设置,但它们非常 棘手。如果这是一个您永远无法访问默认存储库的企业环境,那么使用自定义sbt.boot.properties. 您可以从0.13.x 的默认文件sbt.boot.properties开始,更改应该可以使您从Server access errors.

  3. 您提供的日志中没有任何内容表明该插件无法从您的代理解析,只是尝试访问官方存储库超时。使用默认的 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
    
    Run Code Online (Sandbox Code Playgroud)

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