Scala:创建一个依赖外部Scala库的小型可执行文件Jar

时间:2011-04-18 16:12:31

标签: scala jar executable-jar

我正在尝试以“干净的方式”打包一个小应用程序(仍在学习Scala!)。目标是拥有一个可执行的JAR文件。我做了以下事情:

  • 使用sbt打包JAR - >
  • 将与之合作
scala -cp myjarfile.jar MyClass

java -classpath path\to\scala-library.jar;myjarfile.jar MyClass

但无法使用

java -jar myjarfile.jar

因为无法找到scala / ScalaObject。并且在最后一个上添加类路径没有用,因为-jar选项将忽略-classpath选项。请注意,我已在系统CLASSPATH变量中添加了scala库,但在使用-jar时似乎也会忽略它。

  • 将scala库内容(首先解压缩)添加到sbt创建的jar中。然后这可以工作(jar可以双击并启动),但操作有点冗长,并且生成的文件大几兆字节。不理想。

经过数小时的谷歌搜索,我无法创建一个小的jar文件,双击时会启动并且不会涉及痛苦的操作。我错过了什么?我猜应该有一些方法来定义scala库在系统级别的位置。您如何处理您希望编译并准备运行以提高效率的小型应用程序?

请注意,虽然我正在使用sbt,但我手头没有jar工具(我依赖的是JRE,而不是JDK)。

谢谢! 皮耶尔里克。

1 个答案:

答案 0 :(得分:3)

以下设置适用于我:

  • scala-library.jar放在与可执行jar相同的文件夹中(并从那里调用java)
  • 把它放到你的清单中: Class-Path: scala-library.jar

另一种选择是将scala-library.jar的内容合并到您的应用程序jar中。缺点是这将增加其尺寸。但您可以使用Proguard从最终的jar中删除未使用的类。我认为有一种简单的方法可以使用sbt使用proguard打包可执行jar。

关于使用Proguard缩小,您可以查看this page。这是关于Android开发;只是忽略这一部分,看看收缩结果的表格。一些示例应用程序缩小到不到100kB。

修改

也许你需要稍微改进一下你的问题。你想要实现什么目标?是否要仅在系统上安装程序或者是否要分发程序?

如果您只想快速启动Java应用程序而不会对JVM启动时间产生太大影响,那么您可以查看nailgun