ScalaJS 项目:SBT 对 Leaflet 的依赖未解决

ScalaJS Project: SBT dependency on Leaflet not resolved

我有一个使用 SBT 在 IntelliJ 中构建的 ScalaJS 项目,我想在其中包含一个基于 Leaflet 库的滑动地图。

我正在使用 ScalaJS 版本 0.6.19 和 SBT 版本 0.13.7

我的build.sbt如下:

import com.lihaoyi.workbench.Plugin.{bootSnippet, updateBrowsers}

enablePlugins(ScalaJSPlugin)

workbenchSettings

name := "WeatherReport"
version := "0.1-SNAPSHOT"

scalaVersion := "2.11.11"

libraryDependencies ++= Seq(
   "org.scala-js"    %%% "scalajs-dom"       % "0.9.1"
  ,"org.scala-js"    %%% "scalajs-java-time" % "0.2.2"
  ,"com.lihaoyi"     %%% "scalatags"         % "0.6.5"
  ,"org.webjars.npm" %%% "leaflet"           % "0.7.7"
)

bootSnippet := "com.sap.demo.WeatherReport().main(document.getElementById('weatherDiv'));"

updateBrowsers <<= updateBrowsers.triggeredBy(fastOptJS in Compile)

在我添加对 leaflet 的最后一个依赖之前,这一切都运行良好。现在SBT抱怨:

Error:Error while importing SBT project:
...
[info] Resolving org.eclipse.jetty#jetty-util;8.1.16.v20140903 ...
[info] Resolving org.eclipse.jetty#jetty-io;8.1.16.v20140903 ...
[info] Resolving org.eclipse.jetty#jetty-http;8.1.16.v20140903 ...
[info] Resolving org.eclipse.jetty#jetty-server;8.1.16.v20140903 ...
[info] Resolving org.eclipse.jetty.orbit#javax.servlet;3.0.0.v201112011016 ...
[info] Resolving org.eclipse.jetty#jetty-continuation;8.1.16.v20140903 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.webjars.npm#leaflet_sjs0.6_2.11;0.7.7: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn]  Note: Unresolved dependencies path:
[warn]      org.webjars.npm:leaflet_sjs0.6_2.11:0.7.7 (/Developer/Scala/weather-report/build.sbt#L13-19)
[warn]        +- weatherreport:weatherreport_sjs0.6_2.11:0.1-SNAPSHOT
[trace] Stack trace suppressed: run 'last *:ssExtractDependencies' for the full output.
[trace] Stack trace suppressed: run 'last *:update' for the full output.
[error] (*:ssExtractDependencies) sbt.ResolveException: unresolved dependency: org.webjars.npm#leaflet_sjs0.6_2.11;0.7.7: not found
[error] (*:update) sbt.ResolveException: unresolved dependency: org.webjars.npm#leaflet_sjs0.6_2.11;0.7.7: not found
[error] Total time: 1 s, completed 31-Aug-2017 10:26:54

据我所知,从 WebJars 网站上的 leaflet entry,我得到的 group/artifact/version 信息是正确的。

我不清楚为什么错误消息在库名称中添加了“_sjs0.6_2.11”。这是因为需要一些特定于 ScalaJS 的传单版本吗?

谢谢

克里斯·W

你混淆了 Webjars,它们是包含在 Maven 上发布的 .js 库的 .jars,以及 Scala.js 库,这些库也是在 Maven 上发布的 .jars,但包含 Scala.js' .sjsir 文件。

根据 Webjars 中的 JS 库,通常在 Scala.js sbt 构建中使用 jsDependencies 完成, 而不是 使用 libraryDependencies。因此,他们也应该使用 % 而不是 %%%。例如:

jsDependencies += "org.webjars.npm" % "leaflet" % "0.7.7" / "dist/leaflet.js"

现在您可能还希望 Scala.js facades 使用静态类型与 Leaflet 通信。幸运的是,such a facade library already exists。由于外观库是 Scala.js 库(与 Webjar 中的 JS 库相对),因此将在 libraryDependencies%%% 中指定。但是,该特定库似乎尚未(尚未)在 Maven Central 上发布,因此您可能必须自己在本地发布它。