繁体   English   中英

用于 SBT 的类似 maven-shade 的插件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM