2015-05-25 11 views
9

Ich habe Funke-Anwendung ausgeführt und möchte die Testklassen in den Fettbehälter packen. Was komisch ist, habe ich "sbt assembly" erfolgreich ausgeführt, aber gescheitert, als ich "sbt test: assembly" ausgeführt habe.spark + sbt-assembly: "deduplizieren: verschiedene Dateiinhalte gefunden im Folgenden"

Ich versuchte sbt-assembly : including test classes, es hat nicht für meinen Fall funktioniert.

SBT Version: 0.13.8

build.sbt:

import sbtassembly.AssemblyPlugin._ 

name := "assembly-test" 

version := "1.0" 

scalaVersion := "2.10.5" 

libraryDependencies ++= Seq(
    ("org.apache.spark" % "spark-core_2.10" % "1.3.1" % Provided) 
    .exclude("org.mortbay.jetty", "servlet-api"). 
    exclude("commons-beanutils", "commons-beanutils-core"). 
    exclude("commons-collections", "commons-collections"). 
    exclude("commons-logging", "commons-logging"). 
    exclude("com.esotericsoftware.minlog", "minlog").exclude("com.codahale.metrics", "metrics-core"), 
    "org.json4s" % "json4s-jackson_2.10" % "3.2.10" % Provided, 
    "com.google.inject" % "guice" % "4.0" 
) 

Project.inConfig(Test)(assemblySettings) 

Antwort

13

Sie haben mergeStratey in der Montage zu definieren, wie das, was ich unten für meinen Funken App tat.

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => 
    { 
    case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last 
    case PathList("javax", "activation", xs @ _*) => MergeStrategy.last 
    case PathList("org", "apache", xs @ _*) => MergeStrategy.last 
    case PathList("com", "google", xs @ _*) => MergeStrategy.last 
    case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last 
    case PathList("com", "codahale", xs @ _*) => MergeStrategy.last 
    case PathList("com", "yammer", xs @ _*) => MergeStrategy.last 
    case "about.html" => MergeStrategy.rename 
    case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last 
    case "META-INF/mailcap" => MergeStrategy.last 
    case "META-INF/mimetypes.default" => MergeStrategy.last 
    case "plugin.properties" => MergeStrategy.last 
    case "log4j.properties" => MergeStrategy.last 
    case x => old(x) 
    } 
} 
+0

Setzen Sie all diese Sachen in die sbt-Datei und fügte mehr "exclude (...)" Klauseln, jar kann generiert werden und Testklassen sind auch in der Jar, aber ich fand "zur Verfügung gestellt" funktioniert nicht – Grant

+0

"Bereitgestellt" wird nur benötigt, wenn Sie Ihre Funke-App über Spark-Submit senden. Wenn Sie Ihre Spark-App direkt ausführen, verwenden Sie nicht "bereitgestellt". –

20

Als Ergänzung zu Wesley Milano Antwort, muss der Code ein wenig für die neuere Version (dh 0.13.0) der SBT-Montage-Plugin, falls jemand angepasst werden soll, über Warnungen deprecation fragen:

+9

Ich benutze Scala seit mehr als einem Jahr und ich habe keine Ahnung, was für ein bisschen Codecode, aber das Wichtigste ist, dass es funktioniert. Vielen Dank –

+0

Danke und diese Lösung funktioniert sehr gut –

+0

@FelipeAlmeida Sie schienen am Funken erlebt zu sein, also habe ich mich gefragt, ob Sie mir ein wenig helfen können ... Ich versuche, eine Jar-Datei aus meinem SBT-Projekt zu erstellen. Weißt du wie ich das machen kann? – CapturedTree