2015-05-25 15 views
9

Ho eseguito un'applicazione spark e voglio inserire le classi di test nel barattolo di grasso. Quello che è strano è che ho eseguito "sbt assembly" con successo, ma non sono riuscito quando ho eseguito "sbt test: assembly".spark + sbt-assembly: "deduplicate: contenuto di file diverso trovato nel seguente"

Ho provato sbt-assembly : including test classes, non ha funzionato per il mio caso.

versione SBT: 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) 

risposta

13

Si dovrà definire mergeStratey in assemblea, come quello che ho fatto per la mia scintilla app di seguito.

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

cadere tutte queste cose nel file SBT e ha aggiunto di più "escludere (...)" clausole, vaso possono essere generati e classi di test sono anche nel vaso, tuttavia ho trovato "a condizione" non funziona – Grant

+0

"fornito" è necessario solo se si invia la propria app scintilla tramite scintilla-invia. Se esegui direttamente la tua app scintilla, non utilizzare "fornito". –

20

In aggiunta alla risposta di Wesley Milano, il codice deve essere adattato un po 'per la versione più recente (cioè 0.13.0) del plugin sbt-assemblaggio, in caso qualcuno si interroga su warning di deprecazione:

assemblyMergeStrategy in assembly := { 
    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 => 
     val oldStrategy = (assemblyMergeStrategy in assembly).value 
     oldStrategy(x) 
} 
+9

Ho usato Scala per più di un anno e non ho idea di cosa sia questo codice, ma l'importante è che funzioni. Grazie –

+0

Grazie e questa soluzione funziona molto bene –

+0

@FelipeAlmeida Sembravi essere esperto alla scintilla, quindi mi chiedevo se puoi aiutarmi un po '... Sto cercando di creare un file jar dal mio progetto SBT per eseguirlo. Sai come posso farlo? – CapturedTree