让R使用更新版本的java

时间:2014-11-04 21:27:27

标签: java r netlogo

此问题与this other question有关。

我正在尝试将RNetLogo与R一起使用并获得以下错误。

nl.path <- "/Applications/NetLogo 5.1.0"
NLStart(nl.path) 
Error in .jnew("nlcon/Preprocess") : 
  java.lang.UnsupportedClassVersionError: nlcon/Preprocess : Unsupported major.minor version 51.0

根据我在this other question中的理解,问题是R使用的旧版Java与RNetLogo不兼容。

我安装了Java 8.0,希望能解决这个问题,但我的理解是,尽管我的计算机上安装了Java 8.0(Mac OS Maverick),但R不会接受它并继续尝试使用旧版本的Java。

所以我的问题是:如何让R使用Java 8.0而不是任何旧版本?

在终端控制台中,我得到了

java -version :
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

先谢谢你的帮助,

8 个答案:

答案 0 :(得分:3)

在Mac OS X上似乎可以同时拥有多个Java。

在终端上使用以下命令检查您拥有的JDK版本数量。

  

/ usr / libexec / java_home -V

您可以按照以下说明进行正确的Java路径设置:

How To Set $JAVA_HOME Environment Variable On Mac OS X

简而言之:

  

导出JAVA_HOME = $(/ usr / libexec / java_home -v 1.8)

答案 1 :(得分:3)

不幸的是,这些似乎都没有在Mac上提供帮助。 Windows和Linux解决方案不相关,因为文件位于不同的位置。

如果您只是按照Java首选项痛苦的提示以标准方式更新到Java 1.8(Java 8 for Oracle),那么您只需获得Java运行时环境(JRE)。如果你跑...

/ usr / libexec / java_home -V

...它仍然只显示java 1.6和...

导出JAVA_HOME = $(/ usr / libexec / java_home -v 1.8)

...抛出错误,说它无法找到1.8版本。

为了让Mac能够识别更新版本的Java,似乎必须安装JDK v.8(而不是JRE)。此时,您可以让Mac识别出新的Java虚拟机可用,并且您可以成功执行导出命令。 (请注意,新的1.8 JVM位于不同的位置 - / Library / Java而不是/ System / Library / Java for 1.6。)。但是,这对R来说仍然没有好处。

我已经尝试将导出JAVA_HOME ...命令放入我的.profile和我的.bash_profile。然后采购两者。工作正常,但对R AFAICT没有影响。我通过标准的Mac R GUI,RStudio和终端发布了R,它只识别Java 1.6。所以RNetLogo仍然不起作用。

我将尝试在存档中找到RNetLogo 1.0-0并进行测试。如果它有效,我建议回滚1.0-1直到解决这个Java问题。

答案 2 :(得分:2)

我在windows上使用这一行:

options(java.home="C:/Program Files/Java/jre7/")

您可能需要更改7为8并在Mac上找到正确的路径。

答案 3 :(得分:1)

这应该是有效的(最初来自这个blog条目):

1)下载并安装Apple的Java版本1.6。

2)使用sudo R CMD javareconf -n重新配置Java安装。

3)使用:rJava从源代码重新安装install.packages('rJava', type='source')

请在conjugateprior.org感谢Will Lowe的原始帖子和解决方案。

答案 4 :(得分:1)

编辑:我不知道是否有人仍在努力解决这个问题,但是对于rJava 0.9-9,“部分修复”&#39;下面不再有效。 的工作原理完全是此处提供的最终解决方案:https://github.com/s-u/rJava/issues/86

从那里复制,非常感谢Gregory R. Warnes:

  • 通过在终端中运行以下内容来卸载现有的rJava版本:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
    
  • 将以下内容添加到/Users/<userid>/.bashrc

    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre'
    

(例如,在终端中输入> vim /Users/<userid>/.bashrc,然后&#39; i&#39;,添加上面的行,然后&#39;:wq&#39;保存并退出)

  • 关闭并重新启动所有Terminal,R和RStudio窗口

  • 在终端窗口中输入以下内容:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
    
  • 在新的R会话中,从源代码重新安装rJava:

    install.packages("rJava", repos="http://rforge.net", type="source")
    

OLD&#39; PARTIAL FIX&#39; BELOW:

好。我整个上午都在研究这个问题,而且我有一个部分修复。

我尝试了上面的Guilherme Kenji Chihaya建议的解决方案,但即使在sudo R CMD javareconf -ninstall.packages('rJava', type='source')之后,R也坚持使用Java 1.6(并且很乐意这样做)。

但是,R studio在重新安装rJava后抛出错误:

  

库(rJava)   错误:.onLoad在loadNamespace()中失败,对于&#39; rJava&#39;,详情:     call:dyn.load(file,DLLpath = DLLpath,...)     错误:无法加载共享对象&#39; /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so':     dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so,6):未加载库:@ rpath / libjvm.dylib     参考自:/ Library / Frameworks / R.framework / Version /3.2 / Resss / library / rJava / libs / rJava.so     原因:找不到图像   错误:'rJava'

的包或命名空间加载失败

通过Google搜索引导我访问此帖子:http://andrewgoldstone.com/blog/2015/02/03/rjava/,并提供有效的解决方案。在终端中设置以下内容:

alias r="DYLD_FALLBACK_LIBRARY_PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/server/: open -a r"

从终端开始R.然后,神奇地,在R:

> library(rJava)
> .jinit()
> .jcall("java/lang/System", "S", "getProperty", "java.runtime.version")
[1] "1.8.0_11-b12"

但是,这仅在从终端启动R时有效。我还没有能够让R自动识别出正确的&#34; DYLD_FALLBACK_LIBRARY_PATH&#34;无论如何。

答案 5 :(得分:1)

尝试将libjvm.dylib链接到/ usr / lib:

sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/lib
添加了

-f标志以强制覆盖现有文件/链接

答案 6 :(得分:0)

在Ubuntu中有一个命令alternatives,我将它用于此目的。

alternatives --install /usr/bin/java java /usr/java/jdk1.8*/jre/bin/java 200000
alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.8*/jre/bin/javaws 200000
alternatives --install /usr/bin/javac javac /usr/java/jdk1.8*/bin/javac 200000
alternatives --install /usr/bin/jar jar /usr/java/jdk1.8*/bin/jar 200000

安装替代品后,使用以下命令更改您的版本。 alternatives --config java然后选择你的新java。

如果没有,你应该首先找出你的新java究竟在哪里。 locate *jdk1.8* 然后找出你以二进制形式运行的java。 which java这将返回二进制路径。这是旧的java二进制文件,所以删除它并在同一个地方链接新的java二进制文件。例如:ln -s /path/to/java1.8*/bin/java /usr/bin/java

此外,您还需要更新VM所需的CLASS_PATH环境变量。

例如: export CLASS_PATH=/usr/java/jdk1.8*/jre/lib您可以在bashrc文件中添加此行以注册此配置。

答案 7 :(得分:0)

在基于Debian的安装中,R使用/etc/R/Makeconf设置来构建库。其中一个设置是JAVA_HOME。尝试在那里设置正确的路径并重新安装包。