user4955663
user4955663

Reputation: 1071

How to resolve log4javascript JS libraries in ScalaJS project

I have ScalaJS multi project where I try to include and use log4javascript from org.webjars.

Client part of the build.sbt is here:

lazy val mwlclient = (project in file("client")).
  settings(commonSettings: _*).
  settings(
    persistLauncher := true,
    persistLauncher in Test := false,
    sourceMapsDirectories += mwlsharedJs.base / "..",
    unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
    libraryDependencies ++= Seq(
      "com.lihaoyi" %%% "scalatags" % "0.5.2" withJavadoc(),
      "be.doeraene" %%% "scalajs-jquery" % "0.8.0" withJavadoc(),
      "com.lihaoyi" %%% "upickle" % "0.3.6" withJavadoc(),
      "com.lihaoyi" %%% "autowire" % "0.2.5" withJavadoc(),
      "org.scala-js" %%% "scalajs-dom" % "0.8.1" withJavadoc(),
      // Javascript libs
      "org.webjars" % "jquery" % "1.10.2",
      "org.webjars" % "jquery-ui" % "1.11.4",
      "org.webjars" % "log4javascript" % "1.4.13",
      "com.lihaoyi" %%% "utest" % "0.3.0" % "test"          
    ),
    jsDependencies += RuntimeDOM,                   
    jsDependencies += ProvidedJS / "urianchor-1.3.3/jquery.uriAnchor.js",
    jsDependencies += "org.webjars" % "jquery" % "1.10.2" / "jquery.js",
    jsDependencies += "org.webjars" % "jquery-ui" % "1.11.4" / "jquery-ui.js",
    jsDependencies += "org.webjars" % "log4javascript" % "1.4.13" / "log4javascript.js",
    testFrameworks += new TestFramework("utest.runner.Framework"),  
    scalaJSStage in Global := FastOptStage,             
    skip in packageJSDependencies := false              
  ).enablePlugins(ScalaJSPlugin, ScalaJSPlay).
  dependsOn(mwlsharedJs)

When I run sbt package, I get following error message:

    [trace] Stack trace suppressed: run last mwlclient/compile:scalaJSPreLinkClasspath for the full output.
    [error] (mwlclient/compile:scalaJSPreLinkClasspath) org.scalajs.core.tools.classpath.JSLibResolveException: Some references to JS libraries could not be resolved:
    [error] - Ambiguous reference to a JS library: log4javascript.js
    [error]   Possible paths found on the classpath:
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript.js
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript.js
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript.js
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/log4javascript.js
    [error]   originating from: mwlclient:compile
    [error] Total time: 17 s, completed Jan 13, 2016 11:02:30 AM
    [mwlserver] $ 
    ^M[mwlserver] $ 
    [mwlserver] $ last mwlclient/compile:scalaJSPreLinkClasspath
    org.scalajs.core.tools.classpath.JSLibResolveException: Some references to JS libraries could not be resolved:
    - Ambiguous reference to a JS library: log4javascript.js
      Possible paths found on the classpath:
      - META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript.js
      - META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript.js
      - META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript.js
      - META-INF/resources/webjars/log4javascript/1.4.13/log4javascript.js
      originating from: mwlclient:compile

        at org.scalajs.core.tools.classpath.PartialClasspath.resolveAllResourceNames(PartialClasspath.scala:137)
        at org.scalajs.core.tools.classpath.PartialClasspath.resolveDependencies(PartialClasspath.scala:80)
        at org.scalajs.core.tools.classpath.PartialClasspath.resolve(PartialClasspath.scala:64)
        at org.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun$16.apply(ScalaJSPluginInternal.scala:220)
        at org.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun$16.apply(ScalaJSPluginInternal.scala:217)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
        at sbt.std.Transform$$anon$4.work(System.scala:64)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
        at sbt.Execute.work(Execute.scala:244)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    [error] (mwlclient/compile:scalaJSPreLinkClasspath) org.scalajs.core.tools.classpath.JSLibResolveException: Some references to JS libraries could not be resolved:
    [error] - Ambiguous reference to a JS library: log4javascript.js
    [error]   Possible paths found on the classpath:
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript.js
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript.js
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript.js
    [error]   - META-INF/resources/webjars/log4javascript/1.4.13/log4javascript.js
    [error]   originating from: mwlclient:compile

Webjars says log4javascript contains following files:

    META-INF/resources/webjars/log4javascript/1.4.13/changelog.txt
    META-INF/resources/webjars/log4javascript/1.4.13/console.html
    META-INF/resources/webjars/log4javascript/1.4.13/console_uncompressed.html
    META-INF/resources/webjars/log4javascript/1.4.13/js/console.html
    META-INF/resources/webjars/log4javascript/1.4.13/js/console_uncompressed.html
    META-INF/resources/webjars/log4javascript/1.4.13/js/liteconsole.html
    META-INF/resources/webjars/log4javascript/1.4.13/js/liteconsole_uncompressed.html
    META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript_lite.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript_lite_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript_production.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript_production_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/log4javascript_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript_lite.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript_lite_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript_production.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript_production_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/stubs/log4javascript_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript_lite.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript_lite_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript_production.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript_production_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/js/tests/log4javascript_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/license.txt
    META-INF/resources/webjars/log4javascript/1.4.13/log4javascript.js
    META-INF/resources/webjars/log4javascript/1.4.13/log4javascript_uncompressed.js
    META-INF/resources/webjars/log4javascript/1.4.13/main.css

How can I change the build.sbt so that sbt finds the correct log4javascript.js?

Upvotes: 0

Views: 150

Answers (1)

sjrd
sjrd

Reputation: 22105

Use:

    jsDependencies += "org.webjars" % "log4javascript" % "1.4.13" / "1.4.13/log4javascript.js",

so that the path of log4javascript.js is more specific, and the other 3 alternatives found in the classpath are not selected.

Upvotes: 0

Related Questions