【问题标题】:java.lang.NoClassDefFoundError error running RNetLogo on 64-bit Ubuntu 16.04 - but is the issue rJava or NetLogo?在 64 位 Ubuntu 16.04 上运行 RNetLogo 时出现 java.lang.NoClassDefFoundError 错误 - 但问题是 rJava 还是 NetLogo?
【发布时间】:2017-12-09 15:09:41
【问题描述】:

问题

我正在尝试使用 RNetLogo 包在 R 中启动 NetLogo 实例,该包具有 rJava 作为依赖项。

在安装 rJava 0.9-9(来自 rforge 的最新开发快照)期间,我收到以下错误:

warning: [options] bootstrap class path not set in conjunction with -source 1.6

这似乎是指 Java 版本 6,即使我的机器上只有版本 8。但是,rJava 的开发人员似乎说here 只要包安装和加载正确,它确实如此,那么用户应该忽略警告。此外, .jiit() 似乎运行正确:

> .jinit()
[1] 0

并检测到正确的 Java 版本:

> .jcall("java/lang/System", "S", "getProperty", "java.runtime.version")
[1] "1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12"

所以,在加载了 RNetLogo 之后,我尝试启动一个 NetLogo 实例。这是我正在运行的最小代码:

library(RNetLogo)
nl.path <- "~/NetLogo 6.0.2/app"
NLStart(nl.path, gui = FALSE,  nl.jarname='netlogo-6.0.2.jar')

返回以下错误:

java.lang.NoClassDefFoundError: org/nlogo/workspace/Controllable
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
Caused by: java.lang.ClassNotFoundException
    at RJavaClassLoader.findClass(RJavaClassLoader.java:383)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more

我在使用 RStudio 或从终端运行 R(包括以 root 身份运行)时遇到了同样的问题。

我的完整 sessionInfo():

R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.3 LTS

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=en_GB.UTF-8          LC_NUMERIC=C                  LC_TIME=en_GB.UTF-8           LC_COLLATE=en_GB.UTF-8       
 [5] LC_MONETARY=en_GB.UTF-8       LC_MESSAGES=en_GB.UTF-8       LC_PAPER=en_GB.UTF-8          LC_NAME=en_GB.UTF-8          
 [9] LC_ADDRESS=en_GB.UTF-8        LC_TELEPHONE=en_GB.UTF-8      LC_MEASUREMENT=en_GB.UTF-8    LC_IDENTIFICATION=en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RNetLogo_1.0-4 igraph_1.1.2   rJava_0.9-9   

loaded via a namespace (and not attached):
[1] compiler_3.4.3  magrittr_1.5    tools_3.4.3     pkgconfig_2.0.1

尝试修复

基于其他用户似乎相关的问题,我也尝试了以下操作:

°在/etc/profile.d/中设置环境变量:

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
export PATH="$PATH:$HOME/bin:$JAVA_HOME/bin"
export LD_LIBRARY_PATH="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server"
export CLASSPATH="$ClASSPATH:$HOME/R/x86_64-pc-linux-gnu-library/3.4/rJava/java"

° 跑步 sudo R CMD javareconf -e

° 在我的脚本开头添加几行建议作为 mac OS 修复:

Sys.setenv(NOAWT=1)
dyn.load('/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so')

提前致谢

【问题讨论】:

    标签: java r ubuntu netlogo rjava


    【解决方案1】:

    我花了很多时间盯着这个问题,假设我遇到了同样的问题,因为我遇到了同样的错误。因此,对于未来的读者:在 Ubuntu 17.10 上,使用 rJava 0.9-9、NetLogo 6.0.3 和 RNetLogo 1.0-4,使用 Oracle 9 Java SDK 时会出现相同的错误。回到8就解决了。

    对于 OP:nl.path 中的 ~/ 可能是问题所在。在我的系统上它不起作用,但指定完整路径(即 home/user_name/...)可以。

    【讨论】:

      【解决方案2】:

      我在 Ubuntu 16.04 上将 NetLogo 5.3.1 的 rNetLogo 1.0-4 与 openjdk-8 结合使用时遇到了同样的问题。我尝试了 openjdk-8 和 Oracle Java 8(使用 ppa:webupd8team/java),但没有成功。

      最后,它使用 rJava 作为 Ubuntu 包 (r-cran-rjava) 并返回到 rNetLogo 1.0-0(我想成功了),仍然使用 Oracle Java 8。

      url = 'https://cran.r-project.org/src/contrib/Archive/RNetLogo/RNetLogo_1.0-0.tar.gz'
      install.packages(url, repos=NULL, type="source")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多