orrsella / sbt-sublime

An sbt plugin for generating Sublime Text projects with library dependencies sources

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Version 1.0.11 broken with sbt 0.13.8 and sbt-coffeescript 1.0.0

miguelbaldi opened this issue · comments

On version 1.0.11 you introduced the use of spray-json library, but this library has conflicted with a transitive dependency from sbt-coffeescript (sbt-coffeescript:1.0.0 -> sbt-js-engine:1.0.0 -> jse:1.0.0 -> spray-json:1.2.5).
With that we've ended up with 2 versions of spray-json (1.3.2 from sbt-sublime and 1.2.5 from sbt-coffeescript), which causes an error on ./activator ~run task when compiling coffeescript:

[info] CoffeeScript compiling on 1 source(s) java.lang.NoSuchMethodError: spray.json.JsArray.<init>(Lscala/collection/immutable/List;)V at com.typesafe.sbt.jse.SbtJsTask$.com$typesafe$sbt$jse$SbtJsTask$$executeSourceFilesJs(SbtJsTask.scala:215) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10$$anonfun$apply$4.apply(SbtJsTask.scala:289) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10$$anonfun$apply$4.apply(SbtJsTask.scala:286) at com.typesafe.sbt.web.SbtWeb$.withActorRefFactory(SbtWeb.scala:441) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10.apply(SbtJsTask.scala:285) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10.apply(SbtJsTask.scala:284) at scala.collection.immutable.Stream.map(Stream.scala:376) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9.apply(SbtJsTask.scala:283) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9.apply(SbtJsTask.scala:272) at com.typesafe.sbt.web.incremental.package$.syncIncremental(package.scala:228) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1.apply(SbtJsTask.scala:271) at com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1.apply(SbtJsTask.scala:257) at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40) at sbt.std.Transform$$anon$4.work(System.scala:63) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17) at sbt.Execute.work(Execute.scala:235) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159) at sbt.CompletionService$$anon$2.call(CompletionService.scala:28) 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) java.lang.NoSuchMethodError: spray.json.JsArray.<init>(Lscala/collection/immutable/List;)V at com.typesafe.sbt.less.SbtLess$$anonfun$2.apply(SbtLess.scala:70) at com.typesafe.sbt.less.SbtLess$$anonfun$2.apply(SbtLess.scala:56) at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40) at sbt.std.Transform$$anon$4.work(System.scala:63) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17) at sbt.Execute.work(Execute.scala:235) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159) at sbt.CompletionService$$anon$2.call(CompletionService.scala:28) 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] (web-assets:coffeescript) java.lang.NoSuchMethodError: spray.json.JsArray.<init>(Lscala/collection/immutable/List;)V [error] (web-assets:less::jstaskJsOptions) java.lang.NoSuchMethodError: spray.json.JsArray.<init>(Lscala/collection/immutable/List;)V [error] application -
As a workaround I'm using sbt 0.13.7 and sbt-sublime 1.0.9.
I couldnt find any way to exclude plugins dependencies, is it possible?

Thanks for this great plugin!

The problem is that there is a breaking change between versions 1.2.5 and 1.3.1 of spray-json. I played around with it, and I think that version 1.2.6 satisfies both APIs. You can override the version of spray-json that's used by the plugins by adding this to plugins.sbt:

dependencyOverrides += "io.spray" %%  "spray-json" % "1.2.6"

Do you want to give it a try and see if it helps?

Just in case: please be aware that spray-json versions before 1.3.0 are about 10 times slower!

@agemooij thanks for the heads up! sbt-sublime actually uses version 1.3.1.

@orrsella Thank you. I've tested with: sbt 0.13.8, sbt-sublime 1.0.11, sbt-coffeescript 1.0.0 and dependencyOverrides += "io.spray" %% "spray-json" % "1.2.6". Everything works like a charm! dependencyOverrides was exactly what I was looking for.