2016-04-08 19 views
1

sbt/assemblyを初めて使用しました。私はいくつかの依存関係の問題を解決しようとしています。それを行う唯一の方法はカスタムマージ戦略です。私はカフカライブラリーのためにこの試合のエラーを示していますassemblyMergeStrategyが原因でscala.MatchErrorが発生する

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

が、私は完全にそのライブラリを取る場合、私が取得:しかし、私は、マージ戦略を追加しようとするたびに、私はコンパイルに一見ランダムMatchErrorを取得します別のライブラリのMatchError。すべてのライブラリを取り出すと、私自身のコードでMatchErrorが得られます。これは、「assemblyMergeStrategy」ブロックを取り除くと発生しません。私は確かに何か信じられないほど基本的なものを欠いているが、私の人生のために私はそれを見つけることができず、私はこの問題を持っている誰かを見つけることができない。私は古いmergeStrategy構文を試しましたが、私がドキュメントとSOから読むことができる限り、これは今すぐ書くための適切な方法です。助けてください?ここで

は私のプロジェクト/ assembly.sbtです:

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

そして、私のproject.sbtファイル:

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) 

答えて

1

あなたのマージ戦略パターンマッチのデフォルトのケースを逃している。

assemblyMergeStrategy in assembly := { 
    case PathList("org.slf4j", "impl", xs @ _*) => MergeStrategy.first 
    case x => 
    val oldStrategy = (assemblyMergeStrategy in assembly).value 
    oldStrategy(x) 
} 
関連する問題