[英]maven-shade like plugin for SBT
我对 scala 和 sbt 世界比较陌生,我正在尝试使用 sbt 而不是使用 maven 来管理我所有的新项目。 但是现在我无法进一步了解,因为我找不到 mavnen-shade 插件的任何 sbt 对应物。 我发现的只是包含所有依赖项的插件,但这不是我需要的。 那么有人知道一个插件可以将某些依赖项包含到 jar 中吗?
sbt-assembly 0.14.0 添加了着色支持。
sbt-assembly 可以从您的项目或库依赖项中隐藏类。 在 Jar Jar Links 的支持下,字节码转换(通过 ASM)用于更改对重命名类的引用。
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("org.apache.commons.io.**" -> "shadeio.@1").inAll
)
我使用sbt-proguard插件在 Proguard 上取得了成功。 我花了一段时间来设置它,我不得不关闭一些 Proguard 功能才能让它工作,但最终我得到了我想要的:一个我可以用“java -jar”执行的 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'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/**")
}
}
我正在寻找一个类似的东西,因为我完全厌倦了跨版本的后缀错误和来自sbt-assembly的重复数据删除错误。
我设法找到“onejar”插件,但它已经整整一年没有更新,让我知道是否有效: https : //github.com/sbt/sbt-onejar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.