【问题标题】:SBT project for java executable jarjava可执行jar的SBT项目
【发布时间】:2023-03-05 05:09:01
【问题描述】:

将 SBT 项目的目标包设置为可执行 jar 文件的最佳方法是什么?

它需要捆绑 scala-library.jar 并为 main-method 设置清单。

【问题讨论】:

  • 看看github.com/retronym/sbt-onejar。我没有尝试过自己,但我很想知道这是否有效。此外,如果这不起作用,则retronym 也指向github.com/nuttycom/sbt-proguard-plugin
  • 谢谢 huynhjl。它工作得很好,但我决定反对它,因为一个罐子本身似乎充满了类加载 jiggery-pokery。我更喜欢 assembly-sbt 的 mega-jar 方法。

标签: scala executable-jar sbt


【解决方案1】:

使用 assembly-sbt 插件(最初由 Coda Hale 创建,现由 Eugene Yokota 维护):https://github.com/sbt/sbt-assembly

一旦你把它添加到你的项目中,它就会构建一个所谓的“fatjar”,它可以通过java -jar projectName-assembly.jar 执行。它将自动检测您的主要方法——如果您的源中有多个方法,您可以通过设置mainclass 来明确设置要使用的方法,例如:

mainClass in assembly := Some("com.package.ClassNameWithMain")

注意:我编辑了这个答案以与当前版本的 SBT (0.11+) 保持同步。

【讨论】:

  • 谢谢托马斯。这是一个很好的。使用简单。将受益于 proguard 修剪脂肪。
  • 您可以使用 Proguard 插件来做到这一点。确保您指定要保留主类。
  • 是的,Proguard 可以做到这一点,但正确配置很痛苦。 sbt-assembly 的美妙之处在于它非常简单。
  • @folone 我使用程序集尝试了这个并生成了 jar,但它仍然不会使用双击执行。如何创建可执行的 jar,当您单击它时将运行它?
猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2013-06-13
  • 1970-01-01
  • 2014-04-07
  • 2013-10-13
  • 1970-01-01
相关资源
最近更新 更多