Probleme mit der Assembly-Merge-Strategie bei Verwendung von sbt-assembly

Ich versuche, ein Scala-Projekt mithilfe von in ein entfaltbares Fettglas umzuwandelnsbt-assembly. Wenn ich meine Assembly-Task in sbt ausführe, wird die folgende Fehlermeldung angezeigt:

Merging 'org/apache/commons/logging/impl/SimpleLog.class' with strategy 'deduplicate'
    :assembly: deduplicate: different file contents found in the following:
    [error] /Users/home/.ivy2/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar:org/apache/commons/logging/impl/SimpleLog.class
    [error] /Users/home/.ivy2/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.6.4.jar:org/apache/commons/logging/impl/SimpleLog.class

Nun aus der sbt-Assembly Dokumentation:

Wenn sich mehrere Dateien den gleichen relativen Pfad teilen (z. B. eine Ressource mit dem Namen application.conf in JARs mit mehreren Abhängigkeiten), besteht die Standardstrategie darin, zu überprüfen, dass alle Kandidaten den gleichen Inhalt haben, und ansonsten Fehler zu vermeiden. Dieses Verhalten kann auf Pfadbasis mit einer der folgenden integrierten Strategien oder durch Schreiben einer benutzerdefinierten Strategie konfiguriert werden:

MergeStrategy.deduplicate ist die oben beschriebene StandardeinstellungMergeStrategy.first wählt die erste der übereinstimmenden Dateien in der Reihenfolge des Klassenpfads ausMergeStrategy.last wählt den letzten ausMergeStrategy.singleOrError rettet sich mit einer Fehlermeldung bei KonfliktenMergeStrategy.concat Verkettet einfach alle übereinstimmenden Dateien und enthält das ErgebnisMergeStrategy.filterDistinctLines verkettet auch, lässt aber Duplikate ausMergeStrategy.rename Benennt die Dateien um, die aus JAR-Dateien stammenMergeStrategy.discard verwirft einfach passende Dateien

Dabei richte ich meine build.sbt wie folgt ein:

import sbt._
import Keys._
import sbtassembly.Plugin._
import AssemblyKeys._
name := "my-project"
version := "0.1"
scalaVersion := "2.9.2"
crossScalaVersions := Seq("2.9.1","2.9.2")

//assemblySettings
seq(assemblySettings: _*)

resolvers ++= Seq(
    "Typesafe Releases Repository" at "http://repo.typesafe.com/typesafe/releases/",
    "Typesafe Snapshots Repository" at "http://repo.typesafe.com/typesafe/snapshots/",
    "Sonatype Repository" at "http://oss.sonatype.org/content/repositories/releases/"
)

libraryDependencies ++= Seq(
    "org.scalatest" %% "scalatest" % "1.6.1" % "test",
    "org.clapper" %% "grizzled-slf4j" % "0.6.10",
    "org.scalaz" % "scalaz-core_2.9.2" % "7.0.0-M7",
    "net.databinder.dispatch" %% "dispatch-core" % "0.9.5"
)

scalacOptions += "-deprecation"
mainClass in assembly := Some("com.my.main.class")
test in assembly := {}
mergeStrategy in assembly := mergeStrategy.first

In der letzten Zeile der build.sbt habe ich:

mergeStrategy in assembly := mergeStrategy.first

Wenn ich SBT ausführe, wird folgende Fehlermeldung angezeigt:

error: value first is not a member of sbt.SettingKey[String => sbtassembly.Plugin.MergeStrategy]
    mergeStrategy in assembly := mergeStrategy.first

Kann jemand darauf hinweisen, was ich hier falsch mache?

Vielen Dank

Antworten auf die Frage(6)

Ihre Antwort auf die Frage