When I run my tests I see the following error:
Exception: java.lang.NoSuchMethodError: fs2.Stream$.bracket(Ljava/lang/Object;Lscala/Function1;Lscala/Function1;)Lfs2/internal/FreeC;
I first made sure my build file was cleaned up by explicitly declaring transitive dependencies and by removing unused dependencies to produce the following build.sbt:
scalaVersion := "2.12.7"
organization := "com.example "
lazy val lambdas = (project in file("."))
.settings(
libraryDependencies += "org.typelevel" %% "cats-core" % "1.4.0",
libraryDependencies += "org.typelevel" %% "cats-effect" % "1.0.0",
libraryDependencies += "io.circe" %% "circe-core" % "0.10.0",
libraryDependencies += "io.circe" %% "circe-generic" % "0.10.0",
libraryDependencies += "io.circe" %% "circe-parser" % "0.10.0",
libraryDependencies += "io.circe" %% "circe-fs2" % "0.10.0",
libraryDependencies += "co.fs2" %% "fs2-core" % "1.0.0",
libraryDependencies += "co.fs2" %% "fs2-io" % "0.10.0",
libraryDependencies += "org.http4s" %% "http4s-circe" % "0.18.0",
libraryDependencies += "org.http4s" %% "http4s-client" % "0.18.0",
libraryDependencies += "org.http4s" %% "http4s-core" % "0.18.0",
libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.3",
libraryDependencies += "com.amazonaws" % "aws-lambda-java-core" % "1.2.0",
libraryDependencies += "com.amazonaws" % "aws-java-sdk-core" % "1.11.422",
libraryDependencies += "com.amazonaws" % "aws-java-sdk-s3" % "1.11.422",
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test",
libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.14.0" % "test",
libraryDependencies += "io.findify" %% "s3mock" % "0.2.4" % "test"
)
Everything compiles and one of my two tests pass. The other fails with the error above. Here's the output of sbt evicted:
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn] * co.fs2:fs2-core_2.12:1.0.0 is selected over 0.10.0
[warn] +- io.circe:circe-fs2_2.12:0.10.0 (depends on 1.0.0)
[warn] +- com.example:lambdas_2.12:0.1.0-SNAPSHOT (depends on 1.0.0)
[warn] +- co.fs2:fs2-scodec_2.12:0.10.0 (depends on 0.10.0)
[warn] +- org.http4s:jawn-fs2_2.12:0.12.0 (depends on 0.10.0)
[warn] +- co.fs2:fs2-io_2.12:0.10.0 (depends on 0.10.0)
[warn] * org.typelevel:cats-effect_2.12:1.0.0 is selected over 0.8
[warn] +- co.fs2:fs2-core_2.12:1.0.0 (depends on 1.0.0)
[warn] +- com.example:lambdas_2.12:0.1.0-SNAPSHOT (depends on 1.0.0)
[warn] +- org.http4s:http4s-core_2.12:0.18.0 (depends on 0.8)
[warn] * org.typelevel:cats-core_2.12:1.4.0 is selected over {1.0.1, 1.3.1}
[warn] +- io.circe:circe-core_2.12:0.10.0 () (depends on 1.4.0)
[warn] +- co.fs2:fs2-core_2.12:1.0.0 (depends on 1.4.0)
[warn] +- org.typelevel:cats-effect_2.12:1.0.0 (depends on 1.3.1)
[warn] +- com.example:lambdas_2.12:0.1.0-SNAPSHOT (depends on 1.3.1)
[warn] +- org.http4s:http4s-core_2.12:0.18.0 (depends on 1.0.1)
[warn] * io.circe:circe-jawn_2.12:0.10.0 is selected over 0.9.1
[warn] +- io.circe:circe-parser_2.12:0.10.0 () (depends on 0.10.0)
[warn] +- io.circe:circe-fs2_2.12:0.10.0 (depends on 0.10.0)
[warn] +- org.http4s:http4s-circe_2.12:0.18.0 (depends on 0.9.1)
[warn] * org.spire-math:jawn-parser_2.12:0.13.0 is selected over 0.11.0
[warn] +- io.circe:circe-jawn_2.12:0.10.0 () (depends on 0.13.0)
[warn] +- org.http4s:jawn-fs2_2.12:0.12.0 (depends on 0.11.0)
[warn] Run 'evicted' to see detailed eviction warnings
[info] Here are other depedency conflicts that were resolved:
[info] * commons-logging:commons-logging:1.1.3 is selected over 1.2
[info] +- com.amazonaws:aws-java-sdk-core:1.11.422 (depends on 1.1.3)
[info] +- org.apache.httpcomponents:httpclient:4.5.5 (depends on 1.2)
[success] Total time: 2 s, completed Nov 28, 2018 12:56:33 PM
From using sbt-dependency-graph it looks like I will legitimately need two versions of fs2-core: 1.0.0
and 0.10.0
.
This is my attempt at using sbt-assembly shading to handle the evictions by renaming the old version of fs2 in the http4s library that needs it. Nothing is actually compiling with this build file so I'm guessing there are multiple problems with the way I have things set up.
//build properties
//sbt.version=1.1.2
//assembly.sbt
//addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.8")
scalaVersion := "2.12.7"
organization := "com.example"
lazy val fatJar = project
.enablePlugins(AssemblyPlugin)
.settings(
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % "1.4.0",
"org.typelevel" %% "cats-effect" % "1.0.0",
"io.circe" %% "circe-core" % "0.10.0",
"io.circe" %% "circe-generic" % "0.10.0",
"io.circe" %% "circe-parser" % "0.10.0",
"io.circe" %% "circe-fs2" % "0.10.0",
"co.fs2" %% "fs2-core" % "1.0.0",
"co.fs2" %% "fs2-io" % "0.10.0",
"org.http4s" %% "http4s-circe" % "0.18.0",
"org.http4s" %% "http4s-client" % "0.18.0",
"org.http4s" %% "http4s-core" % "0.18.0",
"com.chuusai" %% "shapeless" % "2.3.3",
"com.amazonaws" % "aws-lambda-java-core" % "1.2.0",
"com.amazonaws" % "aws-java-sdk-core" % "1.11.422",
"com.amazonaws" % "aws-java-sdk-s3" % "1.11.422",
"org.scalatest" %% "scalatest" % "3.0.5" % "test",
"org.scalacheck" %% "scalacheck" % "1.14.0" % "test",
"io.findify" %% "s3mock" % "0.2.4" % "test"),
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("co.fs2.**" -> "old_fs2.@1")
.inLibrary("org.http4s" %% "http4s-circe" % "0.18.0")
.inLibrary("org.http4s" %% "http4s-core" % "0.18.0")
)
)
lazy val kraken_shaded = (project in file("."))
.settings(
name := "kraken-shaded",
packageBin in Compile := (assembly in (fatJar, Compile)).value