rJava没有使用正确的Java版本。

8

我已经苦恼了一段时间。当我从R安装rJava时,它会使用Java 1.6而不是1.8。我正在使用MAC OS 10.8.5,并且已经完成以下步骤:

我已经安装了R。
我的机器上有Java 1.6和1.8。
我已经使用终端重新配置了R:sudo R CMD javareconf -n
这是输出的结果:

Java解释器:/usr/bin/java
Java版本:1.8.0_25
Java主目录路径:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Java编译器:/usr/bin/javac
Java头文件生成器:/usr/bin/javah
Java归档工具:/usr/bin/jar
OS X上的非系统Java

尝试编译和链接JNI程序

检测到JNI cpp标志:-I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin
检测到JNI链接器标志:-L$(JAVA_HOME)/lib/server -ljvm
gcc -arch x86_64 -std=gnu99 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/../include/darwin -I/usr/local/include    -fPIC  -mtune=core2 -g -O2  -c conftest.c -o conftest.o
gcc -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
JAVA_HOME : /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre Java库路径:$(JAVA_HOME)/lib/server JNI cpp标志:-I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin JNI链接器标志:-L$(JAVA_HOME)/lib/server -ljvm

然后我继续使用如下方式从R中安装rJava包:

install.packages("rJava", type="source")

并且我得到了 DONE(rJava) 的结果

然后,当我使用以下命令检查版本时:

library(rJava)
.jinit()
.jcall("java/lang/System", "S", "getProperty", "java.runtime.version")

我仍然得到的是1.6.0_25-b17而不是1.8

如果您知道解决方法,请告诉我。


1
你尝试过 options(java.home="/path/to/java") 吗? - Steven Beaupré
1
javareconf -n 什么也不做 - -n 告诉它不要进行任何更改(请参阅 R 文档)。 - Simon Urbanek
2个回答

12

最新版本的rJava已经修复了这个问题。 我使用命令从网站安装了最新版本:

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

现在调用jvm的输出结果如下:

> library(rJava)
> .jinit()
> .jcall("java/lang/System", "S", "getProperty", "java.runtime.version")
[1] "1.7.0_75-b13"
注意:我已安装Java 1.7和1.6,但未安装Java 1.8。

如果您正在使用packrat,并且不想与外部存储库发生麻烦,我建议您执行相同的操作,但使用官方CRAN存储库install.packages("rJava",,"http://cran.r-project.org",type="source") - Mikolaj
我花了几个小时——几个小时——解决这个问题,并尝试了很多答案。你的答案是唯一有效的。如果我能给你100个赞,我一定会这样做。 --手持香槟在房间里跳舞 - Greenleaf

1

在这种情况下对我有帮助的是两件事(遵循此处的建议:https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html

  • 告知Ubuntu您想要使用的Java安装。

为此,我运行了以下命令:

$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.8.0_201/bin/java" 1

$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk1.8.0_201/bin/javac" 1

$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/java/jdk1.8.0_201/bin/javaws" 1

跟随着
$ sudo update-alternatives --set java /usr/java/jdk1.8.0_201/bin/java

$ sudo update-alternatives --set javac /usr/java/jdk1.8.0_201/bin/javac

$ sudo update-alternatives --set javaws /usr/java/jdk1.8.0_201/bin/javaws

那么我最终可以在备选项中看到我的Java

sudo update-alternatives --config java

我选择了新安装的Java。然后我运行了。

 sudo R CMD javareconf JAVA_HOME=/usr/java/jdk1.8.0_201/bin/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接