Область неуправляемой библиотеки зависимостей sbt-assembly

Я пытаюсь охватить библиотеки неуправляемых зависимостей из моего основного проекта. Вот сценарий

У меня есть неуправляемая зависимость в папке lib с именем coinprism-api-assembly-1.2.jar, которая содержит следующий файл Build.scala:

  1 import sbt._
  2 import Keys._
  3 object CoinPrismBuild extends Build {
  4 
  5   val appName = "coinprism-api"
  6   val appV = "1.2"
  7   val scalaV = "2.11.2"
  8   val akkaV = "2.3.6"
  9   val sprayV = "1.3.2"
 10 
 11   val appDependencies = Seq(
 12     "com.typesafe.akka"   %%  "akka-actor"    % akkaV  withSources() withJavadoc(),
 13     "com.typesafe.akka"   %%  "akka-testkit"  % akkaV   % "test"  withSources() withJavadoc(),
 14     "io.spray"            %%  "spray-client"     % sprayV  withSources() withJavadoc(),
 15     "io.spray" %% "spray-can" % sprayV  withSources() withJavadoc(),
 16     "io.spray" %% "spray-routing" % sprayV  withSources() withJavadoc(),
 17     "io.spray" %%  "spray-json" % "1.3.1" withSources() withJavadoc(),
 18     "io.spray" %% "spray-testkit" % sprayV % "test" withSources() withJavadoc(),
 19     "org.scalatest" %% "scalatest" % "2.2.4" % "test" withSources() withJavadoc(),
 20     "joda-time" % "joda-time" % "2.7"
 21   )
 22 
 23 
 24   lazy val root = Project(appName, base=file(".")).settings(
 25     scalaVersion := scalaV,
 26     version := appV,
 27     libraryDependencies ++= appDependencies
 28   )
 29 
 30 }

Проект, который я пытаюсь собрать, имеет следующий файл build.sbt:

import AssemblyKeys._    

name := "suredbits-core" 

version := "2.13.0" 

scalaVersion := "2.11.4" 

resolvers += Resolver.mavenLocal

organization := "com.suredbits.core"

libraryDependencies ++= {  
    val sprayV = "1.3.2"
    val akkaV = "2.3.8" 
    Seq(
    "org.scalatest" % "scalatest_2.11" % "2.2.0",
    "io.spray"            %%  "spray-can"     % sprayV % "provided"  withSources() withJavadoc(),
    "io.spray"            %%  "spray-routing" % sprayV % "provided"  withSources() withJavadoc(),
    "io.spray"            %%  "spray-testkit" % sprayV  % "test"  withSources() withJavadoc(),
    "com.typesafe.akka"   %%  "akka-actor"    % akkaV % "provided" withSources() withJavadoc(),
    "com.typesafe.akka"   %%  "akka-testkit"  % akkaV   % "test" withSources() withJavadoc(),
    "org.specs2"          %%  "specs2-core"   % "2.4.7-scalaz-7.0.6" % "test" withSources() withJavadoc(),
    "org.scalactic"             %%  "scalactic" %   "2.2.1" % "test" withSources() withJavadoc(),
    "io.spray" %%  "spray-json" % "1.3.0" withSources() withJavadoc(),
    "info.blockchain" % "api" % "1.0.1", 
    "com.github.nscala-time" %% "nscala-time" % "1.6.0" withSources() withJavadoc() ,
    "com.typesafe.slick" %% "slick" % "2.1.0" withSources() withJavadoc(),
    "com.typesafe.slick" %% "slick-testkit" % "2.1.0" % "test" withSources() withJavadoc(),
    "com.novocode" % "junit-interface" % "0.10" % "test" withSources() withJavadoc(),
    "postgresql" % "postgresql" % "9.1-901.jdbc4" % "test" withSources() withJavadoc(),
    "org.postgresql" % "postgresql" % "9.2-1003-jdbc4" withSources() withJavadoc(),
      "org.bitcoinj" % "bitcoinj-core" % "0.12" withSources() withJavadoc() ,
    "org.slf4j" % "slf4j-api" % "1.7.5",
    "org.slf4j" % "slf4j-simple" % "1.7.5"
  )
}               

testOptions += Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s", "-a")

parallelExecution in Test := false

logBuffered := false

scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature")

scalacOptions ++= Seq("-Xmax-classfile-name", "255")

scalacOptions in (Compile,doc) ++= Seq("-groups", "-implicits")

вот сообщение об ошибке, которое я теперь получаю после перехода на sbt-assembly версию 0.11.2.

java.lang.RuntimeException: deduplicate: different file contents found in the following:
/home/chris/dev/suredbits-core/lib/coinprism-api-assembly-1.2.jar:scala-xml.properties
/home/chris/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.1.jar:scala-xml.properties
    at sbtassembly.Plugin$Assembly$.sbtassembly$Plugin$Assembly$$applyStrategy$1(Plugin.scala:253)
    at sbtassembly.Plugin$Assembly$$anonfun$15.apply(Plugin.scala:270)
    at sbtassembly.Plugin$Assembly$$anonfun$15.apply(Plugin.scala:267)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
    at scala.collection.Iterator$class.foreach(Iterator.scala:727)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
    at sbtassembly.Plugin$Assembly$.applyStrategies(Plugin.scala:272)
    at sbtassembly.Plugin$Assembly$.x$4$lzycompute$1(Plugin.scala:172)
    at sbtassembly.Plugin$Assembly$.x$4$1(Plugin.scala:170)
    at sbtassembly.Plugin$Assembly$.stratMapping$lzycompute$1(Plugin.scala:170)
    at sbtassembly.Plugin$Assembly$.stratMapping$1(Plugin.scala:170)
    at sbtassembly.Plugin$Assembly$.inputs$lzycompute$1(Plugin.scala:214)
    at sbtassembly.Plugin$Assembly$.inputs$1(Plugin.scala:204)
    at sbtassembly.Plugin$Assembly$.apply(Plugin.scala:230)
    at sbtassembly.Plugin$Assembly$$anonfun$assemblyTask$1.apply(Plugin.scala:373)
    at sbtassembly.Plugin$Assembly$$anonfun$assemblyTask$1.apply(Plugin.scala:370)
    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:262)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
[error] (*:assembly) deduplicate: different file contents found in the following:
[error] /home/chris/dev/suredbits-core/lib/coinprism-api-assembly-1.2.jar:scala-xml.properties
[error] /home/chris/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.1.jar:scala-xml.properties
[error] Total time: 72 s, completed Mar 21, 2015 11:22:24 AM

Итак, как мне исключить конфликты зависимостей в банке coin-prism-api с банками внутри suredbits-core?


person Chris Stewart    schedule 21.03.2015    source источник


Ответы (1)


Насколько я понимаю, одна из библиотек, которые вы включаете, содержит библиотеку scala "xml", и в вашем проекте вы также используете эту библиотеку (напрямую или через зависимость)

Все должно быть хорошо, за исключением того, что вы используете 2 разные версии этой библиотеки. Какую версию библиотеки следует использовать sbt-assembly? Если он выбирает одну версию, модуль, использующий другую версию, не будет работать.

В вашей банке не может быть двух разных версий одной и той же библиотеки.

person kpbochenek    schedule 21.03.2015
comment
Это не сработало, я уменьшил количество ошибок, переключившись обратно на sbt-assembly версию 0.11.2. - person Chris Stewart; 21.03.2015