使用Renjin从Scala中的R脚本加载.RData

使用Renjin从Scala中的R脚本加载.RData,r,scala,renjin,R,Scala,Renjin,我有一个R脚本load.R,它试图 load("test.RData") 当我跑步时: engine.eval(new FileReader("load.R")) 出现异常情况: Exception in thread "main" java.lang.NoClassDefFoundError: org/tukaani/xz/XZInputStream at org.renjin.primitives.io.connections.Connections.gzfile(Conn

我有一个R脚本
load.R
,它试图

load("test.RData")
当我跑步时:

engine.eval(new FileReader("load.R"))
出现异常情况:

   Exception in thread "main" java.lang.NoClassDefFoundError: org/tukaani/xz/XZInputStream
    at org.renjin.primitives.io.connections.Connections.gzfile(Connections.java:79)
    at org.renjin.primitives.R$primitive$gzfile.doApply(R$primitive$gzfile.java:75)
    at org.renjin.primitives.R$primitive$gzfile.apply(R$primitive$gzfile.java:36)
    at org.renjin.primitives.special.InternalFunction.apply(InternalFunction.java:45)
    at org.renjin.eval.Context.evaluateCall(Context.java:302)
    at org.renjin.eval.Context.evaluate(Context.java:222)
    at org.renjin.eval.Context.evaluate(Context.java:163)
    at org.renjin.sexp.Closure.doApply(Closure.java:83)
    at org.renjin.eval.ClosureDispatcher.apply(ClosureDispatcher.java:73)
    at org.renjin.eval.ClosureDispatcher.applyClosure(ClosureDispatcher.java:58)
    at org.renjin.sexp.Closure.apply(Closure.java:78)
    at org.renjin.eval.Context.evaluateCall(Context.java:302)
    at org.renjin.eval.Context.evaluate(Context.java:222)
    at org.renjin.primitives.special.AssignLeftFunction.assignLeft(AssignLeftFunction.java:57)
    at org.renjin.primitives.special.AssignLeftFunction.apply(AssignLeftFunction.java:41)
    at org.renjin.eval.Context.evaluateCall(Context.java:302)
    at org.renjin.eval.Context.evaluate(Context.java:222)
    at org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:38)
    at org.renjin.eval.Context.evaluateCall(Context.java:302)
    at org.renjin.eval.Context.evaluate(Context.java:222)
    at org.renjin.primitives.special.IfFunction.apply(IfFunction.java:40)
    at org.renjin.eval.Context.evaluateCall(Context.java:302)
    at org.renjin.eval.Context.evaluate(Context.java:222)
    at org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:38)
    at org.renjin.eval.Context.evaluateCall(Context.java:302)
    at org.renjin.eval.Context.evaluate(Context.java:222)
    at org.renjin.eval.Context.evaluate(Context.java:163)
    at org.renjin.sexp.Closure.doApply(Closure.java:83)
    at org.renjin.eval.ClosureDispatcher.apply(ClosureDispatcher.java:73)
    at org.renjin.eval.ClosureDispatcher.applyClosure(ClosureDispatcher.java:58)
    at org.renjin.sexp.Closure.apply(Closure.java:78)
    at org.renjin.eval.Context.evaluateCall(Context.java:302)
    at org.renjin.eval.Context.evaluate(Context.java:222)
    at org.renjin.eval.Context.evaluateExpressionVector(Context.java:285)
    at org.renjin.eval.Context.evaluate(Context.java:220)
    at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:145)
    at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:104)
    at com.infosistema.imp.restservice.data_treatment.DataTreatment.<init>(DataTreatment.scala:34)
    at com.infosistema.imp.restservice.data_treatment.Main$.<init>(DataTreatment.scala:45)
    at com.infosistema.imp.restservice.data_treatment.Main$.<clinit>(DataTreatment.scala)
    at com.infosistema.imp.restservice.data_treatment.Main.main(DataTreatment.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: org.tukaani.xz.XZInputStream
    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)
    ... 46 more

仅仅在类路径上有renjin-script-engine.jar是不够的,还需要它的依赖关系

如果使用SBT构建Scala项目,则需要将以下内容添加到构建文件中:

resolvers +=
  "BeDataDriven" at "https://nexus.bedatadriven.com/content/groups/public"

lazy val root = (project in file(".")).
  settings(
    name := "renjin-test",
    version := "1.0",
    scalaVersion := "2.10.6",
    libraryDependencies += "org.renjin" % "renjin-script-engine" % "0.8.1886"
)
有关其他生成工具,请参见:

问题是
coursier
无法解决所有依赖项(未经通知)


plugins.sbt
中删除
addSbtPlugin(“io.get coursier”%%“sbt coursier”%%“1.0.0-M15”)
并使用sbt的默认解析器修复了该问题。

我的
build.sbt
中确实有该依赖项和存储库。我不止一次地从头到尾阅读了文档。另外,这没有多大意义,因为当我在类路径中放置一个.jar时,我从来不必担心它的依赖性,否则每个项目都会有数百个非直接依赖性。由构建系统来确定依赖项的依赖项。尽管如此,类路径还是有问题,因为org.tukaani.xz.XZInputStream不在其中。此类位于org.tukaani:xz:1.0工件中,通常应在类路径上显示为xz-1.0.jar。仔细检查JVM的实际命令行,找出哪里出了问题!我同意它不在类路径中(我检查过)。但是根据人人网文档,除了:
“org.renjin”%“人人网脚本引擎”%“0.8.1886”
您可以直接从sbt运行应用程序吗?您可以将行mainClass:=Some(“com.infosistema.imp.restservice.data_treatment.Main”)添加到构建文件中,然后执行“sbt run”。如果运行时没有错误,那么IntelliJ.Phew可能有问题!很高兴你能解决这个问题!coursier的问题是专门针对Renjin还是其他依赖关系的?显然它无法解决
org.tukaani:xz
。使用coursier超过一个月,这是它第一次“失败”。仍在试图找出原因…我正试图重现这一点,以便我们可以向coursier提交一份错误报告,但我的超级简单项目似乎奏效了:您使用的是什么版本的scala?2.11.8。我解决了一个问题,但还没有费心创建一个最小的工作示例。
resolvers +=
  "BeDataDriven" at "https://nexus.bedatadriven.com/content/groups/public"

lazy val root = (project in file(".")).
  settings(
    name := "renjin-test",
    version := "1.0",
    scalaVersion := "2.10.6",
    libraryDependencies += "org.renjin" % "renjin-script-engine" % "0.8.1886"
)