我有一个带有实现def main(args:Array[String]): Unit
特征的object
的scala应用程序。我使用 sbtAssembly
插件创建一个胖罐子,我可以使用以下方法从控制台运行它:
scala myjar.jar
但是,我想把它交给没有安装 scala 的同事,而只安装 jdk/jre。所以我尝试用java运行它,但是它失败了:
java -jar myjar.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/Seq
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: scala.collection.Seq
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
我必须做什么才能用java
运行它?这可能吗?
要在不指定类路径的情况下仅使用 java -jar
运行 jar,它必须包含所有依赖项,包括标准 Scala 库(从错误消息中我们可以看到缺少的内容(。默认情况下,sbt-assembly 包含它,但它可以配置为排除它,这就是您的构建所做的。只需删除includeScala = false
(或将其设置为 true
(。