【发布时间】:2015-10-31 12:12:24
【问题描述】:
我试图让一个 Scala 程序产生另一个 Scala 程序。我设法从System.getProperty("java.home") 获得了java 可执行文件,我从System.getProperty("java.class.path") (sbt-launcher.jar 位置)获得了一些路径,并通过ClassLoader 我获得了project/target/scala-2.11/classes 目录。
但是,我仍然无法运行它。 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 进程可以使用它们,它们的位置必须存储在某个地方,我将感谢您帮助我找出该位置。
【问题讨论】: