我正在尝试以“干净的方式”打包一个小应用程序(仍在学习Scala!)。目标是拥有一个可执行的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时似乎也会忽略它。
经过数小时的谷歌搜索,我无法创建一个小的jar文件,双击时会启动并且不会涉及痛苦的操作。我错过了什么?我猜应该有一些方法来定义scala库在系统级别的位置。您如何处理您希望编译并准备运行以提高效率的小型应用程序?
请注意,虽然我正在使用sbt,但我手头没有jar工具(我依赖的是JRE,而不是JDK)。
谢谢! 皮耶尔里克。
答案 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。