在64位Ubuntu 16.04上运行RNetLogo的java.lang.NoClassDefFoundError错误 - 但问题是rJava还是NetLogo?

时间:2017-12-09 15:09:42

标签: java r ubuntu netlogo rjava

问题

我正在尝试使用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,只要程序包安装并正确加载它,它就会忽略警告。此外,.jinit()似乎正确运行:

> .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')

提前致谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

最后,它可以作为Ubuntu软件包(r-cran-rjava)与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")