como obter o rJava 0.9-3 para trabalhar no OS X 10.7.4 com o Oracle Java 1.7?

Existe alguém que tenha conseguido que o rJava 0.9-3 funcione no OS X 10.7.4 com o 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)

Eu instalei o rJava usando a função install.packages e a linha de comando install com o R 2.15.2. Eu não recebo nenhum erro.

$ R CMD INSTALL rJava
* installing to library ‘/Library/Frameworks/R.framework/Versions/2.15/Resources/library’
* installing *binary* package ‘rJava’ ...

* DONE (rJava)
$ 

Se eu usar Java Preferences para colocar 1.7 primeiro na lista, mas deixar 1.6 "on", rJava sempre inicia 1.6.

Se eu usar Java Preferences para colocar 1.7 primeiro e desativar o 1.6, o rJava faz isso:

> 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
> 

No entanto, usando a função do sistema, R por si só encontra o 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)
> 

O 1.7 precisa de uma entrada especial em /System/Library/Java/JavaConfig.plist?

O diretório de versões precisa de ajustes para 1.7? É estranho que Corrente vá para A, que termina com 1.7 enquanto o CurrentJDK é mapeado para 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

Mesmo com o R CMD javareconf executado com o caminho apontando para os arquivos 1.7 diretamente ou para os caminhos / usr / bin / java, o rJava ainda não consegue localizar ou iniciar o Java 1.7.

O 1.7 precisa do conjunto de variáveis ​​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

Obrigado por qualquer ajuda

Atualização 1:

Eu perguntei isso na lista stats-rosuda-devel e recebi a seguinte resposta de Simon Urbanek. Eu não acho que o Windows e o Linux tenham os mesmos problemas com a necessidade de compilar a partir do código-fonte para o Java 1.7, já que estamos executando isso no Windows e no Linux e não precisamos compilar o rJava. Vou relatar quando tiver uma chance de tentar isso:

Você está usando obinário que é compilado contra o sistema Java (que no seu sistema é 1.6) - então se você remover o Java 1.6, você o quebrará. Se você quiser usar o Java 1.7, terá que reconfigurar o R ​​para Java 1.7 e recompilar o rJava para usar essas configurações. Observe que o Java da Oracle vive em um lugar totalmente diferente (/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk) do que o sistema Java (/System/Library/Frameworks/JavaVM.framework), portanto, não é intercambiável.

Além disso, o Oracle Java 1.7 não é um framework, é uma grande bagunça que não foi realmente projetada para o OS X, então você tem que configurá-lo manualmente para configurações como no Linux - é muito doloroso. Também requer substituições ... por isso, se você realmente quiser descer o buraco do coelho, isso é o que funcionou para mim:

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

Em seguida, instale o rJava a partir de fontes (R64 -> install.packages ("rJava", type = 'source')). Note-se que é apenas 64 bits, por isso só funcionará com R. de 64 bits.

questionAnswers(2)

yourAnswerToTheQuestion