此问题与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)
先谢谢你的帮助,
答案 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 -n
和install.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
。尝试在那里设置正确的路径并重新安装包。