Проект ScalaJS: зависимость SBT от Leaflet не решена
У меня есть проект ScalaJS, построенный в IntelliJ с SBT, в который я хотел бы включить скользкую карту, основанную на библиотеке 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, я правильно понял информацию о группе / артефакте / версии.
Я не понимаю, почему сообщение об ошибке добавило "_sjs0.6_2.11" к имени библиотеки. Это потому, что должна быть какая-то версия листовки, специфичная для ScalaJS?
Спасибо
Крис У
1 ответ
Вы путаете Webjars, которые являются.jars, содержащими библиотеки.js, опубликованные на Maven, с библиотеками Scala.js, которые также.jars публикуются на Maven, но содержат файлы Scala.js.sjsir.
В зависимости от библиотек JS в Webjars обычно делается с jsDependencies
в сборке Scala.js SBT, а не с libraryDependencies
, Поэтому они также должны использовать %
вместо %%%
, Например:
jsDependencies += "org.webjars.npm" % "leaflet" % "0.7.7" / "dist/leaflet.js"
Теперь вы, вероятно, захотите, чтобы фасады Scala.js общались с Leaflet, используя статические типы. К счастью для вас, такая библиотека фасадов уже существует. Поскольку библиотека фасада является библиотекой Scala.js (в отличие от библиотеки JS в Webjar), это будет указано в libraryDependencies
, с %%%
, Однако, похоже, что эта конкретная библиотека (пока) не опубликована в Maven Central, поэтому вам, возможно, придется опубликовать ее самостоятельно.