让R使用更新版本的java

这个问题与另一个问题有关 。

我试图使用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 

根据我在其他问题中的理解,问题是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) 

在此先感谢您的帮助,

在Mac OS X上,您可以同时拥有多个Java。

在终端上使用以下命令检查您拥有多少JDK版本。

/ usr / libexec / java_home -V

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

如何在Mac OS X上设置$ JAVA_HOME环境变量

简而言之:

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

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

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

/ usr / libexec / java_home -V

…它仍然只显示java 1.6,…

export 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问题。

我在windows上使用这一行:

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

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

这应该是有效的(最初来自这篇博客文章 ):

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

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

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

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

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

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

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

编辑:我不知道是否有人仍在努力解决这个问题,但是对于rJava 0.9-9,下面的“部分修复”不再适用。 什么工作,完全是这里提供的最终解决方案: https : //github.com/su/rJava/issues/86

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

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

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

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

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

  • 关闭并重新启动所有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") 

旧的’PARTIAL FIX’如下:

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

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

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

library(rJava)错误:.onLoad在loadNamespace()中为’rJava’失败,详细信息:call:dyn.load(file,DLLpath = DLLpath,…)错误:无法加载共享对象’/ 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/Versions/3.2/Resources/library/rJava/libs/rJava.so原因:未找到映像错误:包或命名空间加载失败’rJava’

谷歌搜索引导我到这篇文章: 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 -ar" 

并从终端启动R. 然后,神奇地,在R:

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

但是,这仅在从终端启动R时有效。 我无法让R以任何方式自动识别正确的“DYLD_FALLBACK_LIBRARY_PATH”。

在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*然后找出你以二进制forms运行的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文件中添加此行来注册此配置。

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