2016-08-02 77 views
1

这个问题困扰了我一个星期了。我已经在运行Ubuntu服务器14.04的R上安装了rJAVA。我安装rJava包的源是这样的:rJAVA java错误版本

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

,我也得到:

DONE(rJava) 

我已经安装了java-8-openjdk和运行java -version时,我得到了正确的版本,这是输出:

openjdk version "1.8.0_91" 
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-0ubuntu4~14.04-b14) 
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode) 

但是,当我检查R中的Java版本使用

sudo R CMD javareconf 

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

Java版本仍然设置为1.7:

Java interpreter : /usr/lib/jvm/default-java/jre/bin/java 
Java version  : 1.7.0_101 
Java home path : /usr/lib/jvm/default-java 
Java compiler : /usr/lib/jvm/default-java/bin/javac 
Java headers gen.: /usr/lib/jvm/default-java/bin/javah 
Java archive tool: /usr/lib/jvm/default-java/bin/jar 

trying to compile and link a JNI program 
detected JNI cpp flags : -I$(JAVA_HOME)/include 
detected JNI linker flags : -L/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server -ljvm 
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -I/usr/lib/jvm/default-java/include  -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c conftest.c -o conftest.o 
gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o conftest.so conftest.o -L/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server -ljvm -L/usr/lib/R/lib -lR 


JAVA_HOME  : /usr/lib/jvm/default-java 
Java library path: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server 
JNI cpp flags : -I$(JAVA_HOME)/include 
JNI linker flags : -L/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server -ljvm 
Updating Java configuration in /usr/lib/R 
Done. 

请让我知道我错过了什么。

+0

将您的'JAVA_HOME'环境变量更改为'java-8 jvm'目录。 – Abdou

+0

@abdou谢谢。当我回显$ JAVA_HOME时,我得到了 /usr/lib/jvm/java-8 -d openjdk-amd64 –

+0

克里斯,德克的回答是相当包罗万象的。我很惊讶它不能解决问题。但是您可以尝试将.Rprofile文件中的'JAVA_HOME'变量设置为'java-8 jvm'目录。我真的怀疑它会有什么不同,但至少可以尝试。 – Abdou

回答

1

我认为“所有”,你需要做的是

  1. 确保你的“新”的Java至上的$PATH;它的安装程序可能已经追加到最后 - 非常正确。

  2. 确保您使用该路径运行sudo R CMD javareconf

综合这两者结合起来,也许

PATH=/opt/java/whatever/bin:$PATH sudo R CMD javareconf 

是所有需要。根据需要调整路径。

最后,来自源的rJava可能不需要。我做sudo apt-get install r-cran-rjava

+0

谢谢德克。我没有做好这件事。仍然使用Java 7 for R –

+0

嗯。我认为这在一些其他软件堆栈需要不同/更新的Java时适用于我。 –

0

我有同样的问题:java -version给Java的8,但sudo R CMD javareconf给Java 7中

运行sudo R CMD javareconf --help给出:

Environment variables that can be used to influence the detection: 
JAVA   path to a Java interpreter executable 
       By default first 'java' command found on the PATH 
       is taken (unless JAVA_HOME is also specified). 
JAVA_HOME  home of the Java environment. If not specified, 
       it will be detected automatically from the Java 
       interpreter. 

的文件告诉我们做什么德克建议:确保第一java发现于PATH是我们想要的。这并没有帮助我的情况,即使JAVA_HOME没有设置。阿布杜的建议JAVA_HOME在我的.Rprofile也没有帮助。

为了解决这个问题,我必须设置根的JAVA_HOME到一个我想要的(因为R CMD javareconf运行为须藤):

sudo -i 
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)))) 
R CMD javareconf 
exit 
0

我有同样的问题与rJava上Ububtu 14.04。将文件/usr/lib/R/etc/javaconf中的第一行更改为: ${JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/bin/java},并运行sudo R CMD javareconf解决了我的问题。