Я пытаюсь создать одну программу Scala, которая запускает еще одну программу Scala. Мне удалось получить java
исполняемый файл от System.getProperty("java.home")
, я получил какой-то путь от System.getProperty("java.class.path")
(sbt-launcher.jar
), а также с ClassLoader
У меня есть project/target/scala-2.11/classes
.Поиск местоположения библиотек Scala из программы Scala
Однако я все еще не могу запустить его. JVM жалуется, что он не может найти классы Scala библиотечные:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/concurrent/ExecutionContext
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.concurrent.ExecutionContext
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
Я ищу способ, чтобы добавить эти файлы в путь к классам, но я хочу, чтобы быть портативными. Я не ищу решения, такие как расположение жесткого кодирования scala на локальном компьютере, и я не хочу использовать другие переменные среды и параметры, чем уже существующие. Я также не хочу полагаться на присутствие SBT или Activators в среде пользователя.
Поскольку процесс родительского JVM может использовать их, их местоположение должно быть где-то сохранено, и я буду благодарен за помощь в выяснении этого местоположения.