为什么在运行时需要Scala编译器? (具有Scalap依赖关系的Play2/Salat) [英] Why do i need Scala compiler at runtime? (Play2/Salat with Scalap dependency)

查看:228
本文介绍了为什么在运行时需要Scala编译器? (具有Scalap依赖关系的Play2/Salat)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Scala/Mongo/Casbah/Salat/Play2,当我尝试使用Salat时,似乎对Scalap有依赖性.

I'm using Scala / Mongo / Casbah / Salat / Play2 and when i try to use Salat it seems it has a dependency to Scalap.

当使用play run运行应用程序但使用play start时,它运行正常,我得到以下堆栈:

It works fine when running the application with play run but with play start i get the following stack:

[info] application - Can't create user 
java.lang.NoClassDefFoundError: scala/tools/nsc/util/ClassPath$JavaContext
    at scala.tools.scalap.scalax.rules.scalasig.ScalaSigParser$.scalaSigFromAttribute(ScalaSig.scala:35) ~[scalap-2.9.1.jar:na]
    at scala.tools.scalap.scalax.rules.scalasig.ScalaSigParser$.parse(ScalaSig.scala:38) ~[scalap-2.9.1.jar:na]
    at com.novus.salat.util.ScalaSigUtil$$anonfun$parseScalaSig0$2.apply(ScalaSigUtil.scala:73) ~[salat-util_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at com.novus.salat.util.ScalaSigUtil$$anonfun$parseScalaSig0$2.apply(ScalaSigUtil.scala:73) ~[salat-util_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at scala.Option.map(Option.scala:133) ~[scala-library.jar:na]
    at com.novus.salat.util.ScalaSigUtil$.parseScalaSig0(ScalaSigUtil.scala:73) ~[salat-util_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
Caused by: java.lang.ClassNotFoundException: scala.tools.nsc.util.ClassPath$JavaContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0_01]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_01]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_01]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_01]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) ~[na:1.7.0_01]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_01]

scala/tools/nsc/util/ClassPath$JavaContext在Scala编译器项目中,因此我添加了SBT依赖项:

scala/tools/nsc/util/ClassPath$JavaContext is in the Scala compiler project so i added the SBT dependency:

"org.scala-lang" % "scala-compiler" % "2.9.1"

现在它也可以与play start一起使用.

Now it works fine with play start too.

但是必须在运行时依赖scala编译器来运行我的项目是正常的吗? 为什么在没有scala编译器依赖性的情况下,它可以与play run一起使用?不以生产模式运行时会自动嵌入吗?

But is it normal to have to run my project with a runtime dependency to the scala compiler? And why does it work with play run without the scala compiler dependency? Is it automatically embedded when not running in production mode?

谢谢

推荐答案

Scalap实际上取决于Scala编译器:

Actually Scalap depends on the Scala compiler:

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-compiler</artifactId>
        <version>2.9.0.RC4</version>
    </dependency>
</dependencies>

http://www.jarvana.com/jarvana/inspect-pom/org/scala-lang/scalap/2.9.0.RC4/scalap-2.9.0.RC4.pom

我遇到了问题,因为临时的依赖关系是手动处理的,而不是由SBT处理的.

I was having the problem because temporary my dependencies were handled manually and not by SBT.

现在我通过SBT对其进行管理,并且运行良好...但是编译器仍以Salat作为初始依赖项作为传递依赖项进行检索...

Now i manage them by SBT and it works fine... but the compiler is still retrieved as a transitive dependency with Salat as initial dependency...

在运行时拥有编译器很奇怪,但是它可以工作...

It's strange to have the compiler at runtime but it works...

这篇关于为什么在运行时需要Scala编译器? (具有Scalap依赖关系的Play2/Salat)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆