如何在托管环境中为Scala解释器设置类路径?

cre*_*zel 6 scala classpath

我正在开发Apache Wicket Web框架的扩展,它允许用户在运行时从浏览器执行多种编程语言的代码.其中一种语言是Scala,但是当它作为WAR文件捆绑并部署到Tomcat等容器时遇到了麻烦.

调用Scala解释器时,它拒绝使用以下消息运行代码:

Failed to initialize compiler: object scala not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.
Run Code Online (Sandbox Code Playgroud)

在Scala设置上设置usejavacp后,它仍然无法在托管环境中工作.问题似乎是Scala解释器无法在Java类路径上找到Scala库jar.

在网上搜索,我找到了一个建议,建议使用两个名为'boot.class.path'和'app.class.path'的类路径资源,它们应该包含所需的类路径声明.我试过这个似乎工作.但是,我对这个解决方案的问题是,我的扩展是为了捆绑到WAR文件中并在不同的环境中运行,因此用户必须根据它运行的环境修改这些资源.将每个jar的路径包含在文件中也需要做很多工作.

也许我不完全理解这个提议.有人知道这方面的解决方案吗?

mic*_*hid 2

您可以尝试手动构建和设置类路径:

val setting = new scala.tools.nsc.settings.MutableSettings(println(_))
settings.classpath.append("my/path")
Run Code Online (Sandbox Code Playgroud)

并将此 Settings 实例传递给 Scala 编译器。