¿Cómo hacer que rJava 0.9-3 funcione en OS X 10.7.4 con Oracle Java 1.7?
¿Hay alguien por ahí que haya logrado que rJava 0.9-3 funcione en OS X 10.7.4 con Oracle Java 1.7?
R version 2.15.2 (2012-10-26) -- "Trick or Treat" Platform
x86_64-apple-darwin9.8.0/x86_64 (64-bit)
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
Instalé rJava utilizando la función install.packages y la línea de comandos con R 2.15.2. No me sale ningún error.
$ R CMD INSTALL rJava
* installing to library ‘/Library/Frameworks/R.framework/Versions/2.15/Resources/library’
* installing *binary* package ‘rJava’ ...
* DONE (rJava)
$
Si utilizo las Preferencias de Java para poner 1.7 primero en la lista, pero dejo 1.6 "encendido", rJava siempre comienza con 1.6.
Si uso las Preferencias de Java para poner 1.7 primero y desactivar 1.6, rJava hace esto:
> library(rJava)
> .jinit()
JavaVM: requested Java version ((null)) not available. Using Java at "" instead.
JavaVM: Failed to load JVM: /bundle/Libraries/libserver.dylib
JavaVM FATAL: Failed to load the jvm library.
Error in .jinit() : JNI_GetCreatedJavaVMs returned -1
>
Sin embargo, utilizando la función del sistema, R encuentra Java 1.7.
> system("java -version")
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
>
¿Necesita 1.7 una entrada especial en /System/Library/Java/JavaConfig.plist?
¿El directorio de versiones necesita ajustes para 1.7? Es extraño que la Corriente vaya a A, que termina con 1.7 mientras que CurrentJDK se asigna a 1.6
$cd /System/Library/Frameworks/JavaVM.framework/Versions/
$ls -la
total 64
drwxr-xr-x 11 root wheel 374 Sep 26 10:10 .
drwxr-xr-x 11 root wheel 374 Nov 26 09:24 ..
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.4 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.4.2 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.5 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.5.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.6 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.6.0 -> CurrentJDK
drwxr-xr-x 8 root wheel 272 Nov 26 09:24 A
lrwxr-xr-x 1 root wheel 1 Sep 26 10:09 Current -> A
lrwxr-xr-x 1 root wheel 59 Sep 26 10:09 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
Incluso con R CMD javareconf ejecutado con la ruta que apunta a los archivos 1.7 directamente o a las rutas / usr / bin / java, rJava aún no puede encontrar o iniciar Java 1.7.
¿Necesita 1.7 el conjunto de variables JAVA_LD_LIBRARY_PATH?
Makeconf:JAVA = /usr/bin/java
Makeconf:JAVAC = /usr/bin/javac
Makeconf:JAVAH = /usr/bin/javah
Makeconf:JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre
Makeconf:JAVA_LD_LIBRARY_PATH =
Makeconf:JAVA_LIBS = -framework JavaVM
Makeconf:JAVA_CPPFLAGS = -I$(JAVA_HOME)/include
Makeconf:JAR = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/bin/jar
Makeconf:JAVA = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/bin/java
Makeconf:JAVAC = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/bin/javac
Makeconf:JAVAH = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/bin/javah
Makeconf:JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre
Makeconf:JAVA_LD_LIBRARY_PATH =
Makeconf:JAVA_LIBS = -framework JavaVM
Makeconf:JAVA_CPPFLAGS = -I$(JAVA_HOME)/include
Gracias por cualquier ayuda
Actualización 1:
Pregunté esto en la lista de stats-rosuda-devel y recibí la siguiente respuesta de Simon Urbanek. No creo que Windows y Linux tengan los mismos problemas con la necesidad de compilar desde la fuente para Java 1.7, ya que estamos ejecutando esto en Windows y Linux y no tenemos que compilar rJava. Informaré una vez que tenga la oportunidad de probar esto:
Estas usando elbinario que se compila contra el sistema Java (que en su sistema es 1.6), así que si elimina Java 1.6 lo romperá. Si desea usar Java 1.7, tendrá que volver a configurar R para Java 1.7 y volver a compilar rJava para usar esas configuraciones. Tenga en cuenta que Java de Oracle se encuentra en un lugar completamente diferente (/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk) que el sistema Java (/System/Library/Frameworks/JavaVM.framework), por lo que no es intercambiable.
Además, Oracle Java 1.7 no es un marco, es un gran lío que no fue realmente diseñado para OS X, por lo que debe configurarlo a mano en configuraciones como en Linux, es bastante doloroso. También requiere anulaciones ... así que si realmente quieres ir por el agujero del conejo, esto es lo que funcionó para mí:
JAVA_LD_LIBRARY_PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/server
JAVA_LIBS='-L/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/server -ljvm'
JAVA_CPPFLAGS='-I/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/include/darwin'
R64 CMD javareconf
Luego instale rJava desde las fuentes (R64 -> install.packages ("rJava", type = 'source')). Tenga en cuenta que solo es de 64 bits, por lo que solo funcionará con 64 bits de R.