2016-04-08 14 views
1

sbt/assembly konusunda yeniyim. Bazı bağımlılık problemlerini çözmeye çalışıyorum ve bunu yapmanın tek yolu, özel bir birleştirme stratejisi aracılığıyla görünüyor. Ben kafka kütüphanesi için bu maç hatayı gösteren ediyorumassemblyMergeStrategy scala neden olur.MatchError derlerken

[error] (*:assembly) scala.MatchError: org/apache/spark/streaming/kafka/KafkaUtilsPythonHelper$$anonfun$13.class (of class java.lang.String) 

ama tamamen o kütüphaneyi hale getirirsek, ben alıyorum: Ancak bir birleştirme stratejisini eklemeye çalıştığınızda zaman, ben derleme üzerinde rastgele MatchError olsun MatchError başka bir kütüphanede. Tüm kütüphaneleri çıkarırsam kendi kodumda bir MatchError alırım. "AssemblyMergeStrategy" bloğunu çıkarırsam bunun hiçbiri olmaz. Oldukça basit bir şeyi eksik özlüyorum, ama hayatım boyunca onu bulamıyorum ve bu sorunu olan başka birini bulamıyorum. Eski mergeStrategy sözdizimini denedim, ancak dokümanlar ve SO'dan okuyabildiğim kadarıyla, bunu şimdi yazmanın uygun yolu budur. Lütfen yardım et?

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3") 

Ve project.sbt dosyası:: Kendi birleştirme stratejisi desen maç için varsayılan bir durum kaçırdığınızı

name := "Clerk" 

version := "1.0" 

scalaVersion := "2.11.6" 

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "1.6.1" % "provided", 
    "org.apache.spark" %% "spark-sql" % "1.6.1" % "provided", 
    "org.apache.spark" %% "spark-streaming" % "1.6.1" % "provided", 
    "org.apache.kafka" %% "kafka" % "0.8.2.1", 
    "ch.qos.logback" % "logback-classic" % "1.1.7", 
    "net.logstash.logback" % "logstash-logback-encoder" % "4.6", 
    "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0", 
    "org.apache.spark" %% "spark-streaming-kafka" % "1.6.1", 
    ("org.apache.spark" %% "spark-streaming-kafka" % "1.6.1"). 
    exclude("org.spark-project.spark", "unused") 
) 

assemblyMergeStrategy in assembly := { 
    case PathList("org.slf4j", "impl", xs @ _*) => MergeStrategy.first 
} 

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false) 

cevap

1

:

İşte

benim projem/assembly.sbt olduğunu
assemblyMergeStrategy in assembly := { 
    case PathList("org.slf4j", "impl", xs @ _*) => MergeStrategy.first 
    case x => 
    val oldStrategy = (assemblyMergeStrategy in assembly).value 
    oldStrategy(x) 
}