关于scala:SBT插件未使用自定义解析器

 2021-04-09 

SBT plugins not using custom resolvers

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

1
2
3
4
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仍在尝试使用默认存储库:

1
2
3
4
[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中使用的解析器不同,但是我对刚才描述的问题有几个疑问:

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

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

  • 这实际上是非常棘手的:您正在尝试在插件版本和版本之间共享设置。从sbt的angular来看,这些是"单独的"项目。有些解决方案使用项目引用从构建中获取对插件构建设置的访问权限,但它们非常棘手。如果在公司环境中,您将永远无法访问默认存储库,则使用自定义sbt.boot.properties可能会更容易。您可以从默认文件0.13.x开始
    更改sbt.boot.properties应该会使您脱离Server access errors

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

    1
    2
    3
    4
    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_home>/project/目录中任何.sbt文件中找到任何解析程序。据我所知,sbt文件是按字母顺序评估的,解析器是按它们在每个文件中出现的顺序添加的。


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

    my_project / project / plugins.sbt应该具有:

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

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

    1
    resolvers += ...

    它们是2个不同的构建定义...


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