Запуск программы scala с помощью функции java tool / scala main - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть приложение scala с object, которое реализует черту 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? Это вообще возможно?

1 Ответ

3 голосов
/ 09 апреля 2019

Чтобы запустить jar, используя только java -jar без указания пути к классу, он должен включать все зависимости, включая стандартную библиотеку Scala (и из сообщения об ошибке мы видим, что этого не хватает). По умолчанию sbt-assembly включает его, но его можно настроить , чтобы исключить его , и это то, что делает ваша сборка. Просто удалите includeScala = false (или установите true).

...