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

Pie*_*ric 8 scala jar executable-jar

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

  • 使用sbt打包JAR - >将使用
scala -cp myjarfile.jar MyClass
Run Code Online (Sandbox Code Playgroud)

要么

java -classpath path\to\scala-library.jar;myjarfile.jar MyClass
Run Code Online (Sandbox Code Playgroud)

但不会合作

java -jar myjarfile.jar
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谢谢!皮耶尔里克.

zig*_*tar 3

以下设置对我有用:

  • scala-library.jar与可执行 jar 位于同一文件夹中(并从那里调用 java )
  • 将其放入您的清单中: Class-Path: scala-library.jar

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

关于使用Proguard进行收缩,你可以看看这个页面。这是关于Android开发的;只需忽略这部分并查看收缩结果表即可。一些示例应用程序缩小到不到 100kB。

编辑

也许您需要稍微完善一下您的问题。你想达到什么目的?您只想在您的系统上安装该程序还是想分发它?

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