【发布时间】:2019-08-30 10:36:53
【问题描述】:
我有一个带有 object 的 scala 应用程序,它实现了 def main(args:Array[String]): Unit 特征。我使用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 运行它?这甚至可能吗?
【问题讨论】:
-
组装插件是如何设置的?它是否排除了 Scala 标准库(类似于github.com/sbt/sbt-assembly#excluding-scala-library-jars)?你能检查一下
scala/collection/Seq.class是否在你的胖罐子里吗? -
完美!这确实是缺少的部分,它被设置为
includeScala = false。更改为true后,我可以使用java -jar myjar.jar运行它。如果您将此提示添加为答案,我可以接受。
标签: java scala command-line jar console-application