Я пытаюсь преобразовать проект scala в развернутую масляную банку, используя sbt-assembly. Когда я запускаю задачу сборки в sbt, я получаю следующую ошибку:
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
Теперь из документации sbt-assembly:
Если несколько файлов имеют один и тот же относительный путь (например, ресурс с именем application.conf в JAR с несколькими зависимостями), стратегия по умолчанию чтобы убедиться, что все кандидаты имеют одинаковое содержимое и ошибку в противном случае. Такое поведение можно настроить на основе каждого пути, используя либо одну из следующих встроенных стратегий, либо написать пользовательский вариант:
MergeStrategy.deduplicate
по умолчанию описан выше.MergeStrategy.first
выбирает первый из совпадающих файлов в порядке прохождения классовMergeStrategy.last
выбирает последнийMergeStrategy.singleOrError
скрывается с сообщением об ошибке при конфликтеMergeStrategy.concat
просто объединяет все файлы соответствия и включает результатMergeStrategy.filterDistinctLines
также объединяет, но не оставляет дубликатов вдоль путиMergeStrategy.rename
переименовывает файлы, созданные из файлов jar.MergeStrategy.discard
просто отбрасывает соответствующие файлы
Следуя этому, я устанавливаю свой файл build.sbt следующим образом:
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
В последней строке build.sbt у меня есть:
mergeStrategy in assembly := mergeStrategy.first
Теперь, когда я запускаю SBT, я получаю следующую ошибку:
error: value first is not a member of sbt.SettingKey[String => sbtassembly.Plugin.MergeStrategy]
mergeStrategy in assembly := mergeStrategy.first
Может кто-нибудь указать, что я могу делать неправильно здесь?
Спасибо