Подтвердить что ты не робот

Maven-shade как плагин для SBT

Я относительно новичок в мире scala и sbt, и я пытаюсь управлять всеми своими новыми проектами с помощью sbt, а не с помощью maven. Но теперь я нахожусь в точке, где я больше не знаю, потому что я не могу найти ни одного sbt-аналога для плагина mavnen-shade. То, что я нашел, было только плагинами для включения всех зависимостей, но это не то, что мне нужно. Так кто-нибудь знает плагин для включения определенных зависимостей в банку?

4b9b3361

Ответ 1

sbt-assembly 0.14.0 добавляет поддержку shading.

sbt-assembly может затенять классы из ваших проектов или из зависимостей библиотеки. При поддержке Jar Jar Ссылки, преобразование байт-кода (через ASM) используется для изменения ссылок на переименованные классы.

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

Ответ 2

У меня был успех с Proguard, используя плагин sbt-proguard. Мне потребовалось некоторое время, чтобы настроить его, и мне пришлось отключить некоторые функции Proguard, чтобы заставить его работать, но в итоге я получил то, что хотел: одну банку, которую я мог выполнить с помощью java -jar, даже в системе без scala.

Вот мой project/plugins.sbt, чтобы включить плагин:

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

И вот некоторые фрагменты из моего build.sbt для его настройки:

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

Ответ 3

Я ищу аналогичную вещь, поскольку мне полностью надоели ошибки суффикса с перекрестной версией и дедупликация ошибок из sbt-assembly.

Мне удалось найти плагин "onejar", но он не обновлялся целый год, сообщите мне, если работает: https://github.com/sbt/sbt-onejar