2016-08-02 72 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解決了我的問題。