SBT

2014-12-07 23 views
12

için eklenti gibi maven gölgesi, scala ve sbt dünyasına yeni bir şekilde yeniyim ve maven kullanmak yerine tüm yeni projeleri sbt ile yönetmeye çalışıyorum. Ama şimdi daha fazla bilmediğim bir noktadayım çünkü mavnen-shade eklentisi için herhangi bir sbt karşılığı bulamıyorum. Ne buldum sadece tüm bağımlılıkları eklemek için eklentileri vardı, ama ihtiyacım olan şey bu değil. Yani birileri, belirli bağımlılıkları kavanoza eklemek için bir eklenti mi kullanıyor?SBT

+1

Ben 2.7'ye beri Scala yazıyorum ve hala Maven'i FWIW kullanmayı tercih ediyorum. – lmm

+0

[sbt-assembly eklentisi] (https://github.com/sbt/sbt-assembly) istediğiniz şeyi yapıyor mu? –

+0

Tam olarak değil, "OrginalClassName-1.0-SNAPSHOT.class" gibi jar içindeki tüm dosyaları yeniden adlandırır, böylece sınıf yükleyicisi bunları bulamaz. –

cevap

5

sbt montaj 0.14.0 shading destek ekler İşte

eklentisini etkinleştirmek için benim project/plugins.sbt olduğunu .

sbt-assembly, projelerinizden veya kitaplık bağımlılıklarından gelen renkleri gölgeleyebilir. Jar Jar Links tarafından desteklenen, bytecode transformation (ASM aracılığıyla) yeniden adlandırılan sınıflara yapılan başvuruları değiştirmek için kullanılır.

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

Tamamen çapraz sürüm son eki hatalarından bıktığım ve sbt-assembly hatalarını tekilleştirdiğim için benzer bir şey arıyorum.

Ben eklenti "onejar" bulmayı başardılar fakat işler varsa bana bildirin, bir yıl boyunca güncellenmedi: Ben ProGuard ile başarı elde ettik https://github.com/sbt/sbt-onejar

0

sbt-proguard eklentisi kullanarak. Kurmak için biraz zamanımı aldı ve çalışmasını sağlamak için bazı Proguard özelliklerini kapatmak zorunda kaldım, ama sonunda istediğimi aldım: "java -jar" ile yürütebileceğim tek bir kavanoz, Scala yüklü olmayan bir sistemde bile. yapılandırmak için

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") 

Ve işte benim build.sbt bazı parçacıkları şunlardır:

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/**") 
    } 
}