用SBT构建Java可执行JAR文件的项目

22
什么是将SBT项目的目标包设置为可执行jar文件的最佳方法?
需要捆绑scala-library.jar并设置主方法的清单。

1
看一下 https://github.com/retronym/sbt-onejar。我自己还没试过,但我很想知道它是否有效。如果这不起作用,retronym 还指向了 https://github.com/nuttycom/sbt-proguard-plugin。 - huynhjl
谢谢huynhjl。它运行得很好,但我决定不使用它,因为one-jar本身似乎充满了类加载的技巧。我更喜欢assembly-sbt的mega-jar方法。 - Synesso
1个回答

35

使用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+)版本保持最新。


谢谢Thomas。这是一个好东西。使用简单。如果有proguard来减少冗余代码,会更好。 - Synesso
你可以使用Proguard插件来实现这个功能。确保你指定了要保留主类。 - Philippe
1
是的,Proguard可以做到这一点,但正确配置很麻烦。而sbt-assembly的优美之处在于其极其简单。 - Thomas Lockney
@folone 我尝试使用汇编语言和生成的JAR文件,但仍然无法通过双击执行。如何创建可执行的JAR文件,使其在单击时运行? - Nishan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接