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