Spray microservice assembly deduplicate

193 views Asked by At

I'm using this template to develop a microservice:

http://www.typesafe.com/activator/template/activator-service-container-tutorial

My sbt file is like this:

import sbt._
import Keys._

name := "activator-service-container-tutorial"

version := "1.0.1"

scalaVersion := "2.11.6"
crossScalaVersions := Seq("2.10.5", "2.11.6")

resolvers += "Scalaz Bintray Repo" at "https://dl.bintray.com/scalaz/releases"

libraryDependencies ++= {

    val containerVersion    = "1.0.1"
  val configVersion     = "1.2.1"
  val akkaVersion           = "2.3.9"
  val liftVersion               = "2.6.2"
  val sprayVersion          = "1.3.3"

  Seq(
    "com.github.vonnagy"    %%  "service-container" % containerVersion,
    "com.github.vonnagy"    %%  "service-container-metrics-reporting" % containerVersion,
    "com.typesafe"        %   "config"                   % configVersion,
    "com.typesafe.akka"     %%  "akka-actor"                 % akkaVersion exclude ("org.scala-lang" , "scala-library"),
    "com.typesafe.akka"     %%  "akka-slf4j"                 % akkaVersion exclude ("org.slf4j", "slf4j-api") exclude ("org.scala-lang" , "scala-library"),
    "ch.qos.logback"            %   "logback-classic"        % "1.1.3",
    "io.spray"                      %%  "spray-can"                  % sprayVersion,
    "io.spray"                      %%  "spray-routing"          % sprayVersion,
    "net.liftweb"               %%  "lift-json"                  % liftVersion,

    "com.typesafe.akka"     %%  "akka-testkit"           % akkaVersion   % "test",
    "io.spray"            %%  "spray-testkit"      % sprayVersion  % "test",
    "junit"               %   "junit"              % "4.12"        % "test",
    "org.scalaz.stream"   %%  "scalaz-stream"      % "0.7a"        % "test",
    "org.specs2"          %%  "specs2-core"        % "3.5"         % "test",
    "org.specs2"          %%  "specs2-mock"        % "3.5"         % "test",
    "com.twitter"         %% "finagle-http"        % "6.25.0",
    "com.twitter"         %% "bijection-util"      % "0.7.2"
  )
}

scalacOptions ++= Seq(
  "-unchecked",
  "-deprecation",
  "-Xlint",
  "-Ywarn-dead-code",
  "-language:_",
  "-target:jvm-1.7",
  "-encoding", "UTF-8"
)

crossPaths := false

parallelExecution in Test := false


assemblyJarName in assembly := "santo.jar"
mainClass in assembly := Some("Service")

The project compiles fine! But when I run assembly, the terminal show me this:

[error] (*:assembly) deduplicate: different file contents found in the following:
[error] /path/.ivy2/cache/io.dropwizard.metrics/metrics-core/bundles/metrics-core-3.1.1.jar:com/codahale/metrics/ConsoleReporter$1.class
[error] /path/.ivy2/cache/com.codahale.metrics/metrics-core/bundles/metrics-core-3.0.1.jar:com/codahale/metrics/ConsoleReporter$1.class

What options do I have to fix it? Thanks

1

There are 1 answers

2
Biswanath On BEST ANSWER

The issue as it seems transitive dependency of the dependency is resulting with two different versions of metrics-core. The best thing to do would be to used the right library dependency so that you end up with a single version of this library. Please use https://github.com/jrudolph/sbt-dependency-graph , if it is difficult to figure out dependencies.

If it is not possible to get to a single version then you would most likely to go down exclude route . I assume, this only work, if there is compatibility between the all required versions.