2014-12-07 13 views
12

Sono incredibilmente nuovo al mondo scala e sbt e sto cercando di gestire tutti i miei nuovi progetti con sbt piuttosto che usare Maven. Ma ora sono su un punto in cui non lo so più perché non riesco a trovare nessuna controparte sbt per il plugin mavnen-shade. Quello che ho trovato erano solo plugin per includere tutte le dipendenze, ma non è quello che mi serve. Quindi qualcuno conosce un plugin per includere certe dipendenze nel barattolo?maven-shade come plug-in per SBT

+1

ho scritto Scala dal 2.7 e io ancora preferisco usare Maven, FWIW. – lmm

+0

Il [montaggio sbt-assembly] (https://github.com/sbt/sbt-assembly) fa ciò che vuoi? –

+0

Non esattamente, rinomina tutti i file in jar come "OrginalClassName-1.0-SNAPSHOT.class", quindi il programma di caricamento classi non li trova. –

risposta

5

SBT-assemblaggio 0.14.0 aggiunge il supporto shading .

sbt-assembly può schermare le classi dai progetti o dalle dipendenze della libreria. Sostenuto da Jar Jar Links, la trasformazione bytecode (tramite ASM) viene utilizzata per modificare i riferimenti alle classi rinominate.

assemblyShadeRules in assembly := Seq(
    ShadeRule.rename("org.apache.commons.io.**" -> "[email protected]").inAll 
) 
-1

Sto cercando una cosa simile perché sono completamente stufo degli errori di suffisso cross-version e degli errori di deduplicazione da sbt-assembly.

sono riuscito a trovare "onejar" plug-in, ma non è stato aggiornato per un anno intero, fatemi sapere se funziona: https://github.com/sbt/sbt-onejar

0

Ho avuto successo con Proguard utilizzando il plugin sbt-proguard. Mi ci è voluto un po 'per installarlo e ho dovuto disattivare alcune delle funzionalità di Proguard per farlo funzionare, ma alla fine ho ottenuto quello che volevo: un singolo jar che potevo eseguire con "java -jar", anche su un sistema senza scala installato.

Ecco il mio project/plugins.sbt per abilitare il plugin:

resolvers += Resolver.url("sbt-plugin-releases-scalasbt", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns) 

addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2") 

Ed ecco alcuni frammenti dal mio build.sbt per configurarlo:

scalaVersion := "2.10.2" 

proguardSettings 

ProguardKeys.options in Proguard += ProguardOptions.keepMain("io.package.my.app.Main") 

ProguardKeys.options in Proguard ++= Seq(
    "-keep class com.sun.xml.wss.impl.misc.XWSSProcessorFactory2_0Impl { *; }", // created dynamically by XWSSProcessorFactory 
    // 
    "-dontshrink", 
    "-dontobfuscate", 
    "-dontoptimize", 
    // 
    // Don't warn is necessary to avoid ProGuard refusing to build the jar. 
    // 
    "-dontwarn com.sun.**", 
    "-dontwarn org.apache.**", 
    "-dontwarn scala.**", 
    // 
    // Don't note just reduces clutter in the build output. If you make changes 
    // to the ProGuard configuration, you might want to remove these temporarily to 
    // help debug the new configuration until it's working correctly. 
    // 
    "-dontnote com.sun.**", 
    "-dontnote org.apache.**", 
    "-dontnote scala.**" 
) 

    //"-printconfiguration /tmp/proguard" 

// Examples of how to filter classes. 
ProguardKeys.inputFilter in Proguard := { file => 
    file.name match { 
    case "classes"         => None 
    case "org.apache.karaf.shell.console-2.3.2.jar" => Some("org/apache/karaf/shell/**,org/apache/felix/gogo/commands/**") 
    case "jline-2.9.jar"       => Some("jline/**") 
    case "org.apache.karaf.jaas.modules-2.3.2.jar" => Some("org/apache/karaf/jaas/modules/**") 
    case "org.apache.karaf.jaas.config-2.3.2.jar" => Some("org/apache/karaf/jaas/config/**") 
    case "org.osgi.compendium-4.3.1.jar"   => Some("!**") 
    case _           => Some("!META-INF/**") 
    } 
} 
Problemi correlati