come ottenere rJava 0.9-3 per lavorare su OS X 10.7.4 con Oracle Java 1.7?

C’è qualcuno là fuori che è riuscito a far funzionare rJava 0.9-3 su 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) 

Ho installato rJava usando sia la funzione install.packages che l’installazione da riga di comando con R 2.15.2. Non ho errori.

 $ R CMD INSTALL rJava * installing to library '/Library/Frameworks/R.framework/Versions/2.15/Resources/library' * installing *binary* package 'rJava' ... * DONE (rJava) $ 

Se utilizzo le Preferenze Java per mettere 1.7 prima sulla lista, ma lascia 1.6 “on”, rJava inizia sempre 1.6.

Se utilizzo le Preferenze Java per inserire 1.7 prima e distriggersre 1.6, rJava esegue questa operazione:

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

Tuttavia, utilizzando la funzione di sistema, R individua 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) > 

1.7 richiede una voce speciale in /System/Library/Java/JavaConfig.plist?

La directory Versions deve essere ottimizzata per 1.7? È strano che la corrente vada a A, che termina con 1.7 mentre CurrentJDK è mappato 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 

Anche con javareconf R CMD eseguito con il percorso che punta direttamente ai file 1.7 o ai percorsi / usr / bin / java, rJava non può ancora trovare o avviare Java 1.7.

1.7 ha bisogno della serie di variabili 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 

Grazie per qualsiasi aiuto

Aggiornamento 1:

Ho chiesto questo sulla lista stats-rosuda-devel e ho ricevuto la seguente risposta da Simon Urbanek. Non penso che Windows e Linux abbiano gli stessi problemi con la necessità di compilare dal sorgente per Java 1.7, dato che lo stiamo eseguendo su Windows e Linux e non abbiamo dovuto compilare rJava. Ti riporto una volta ho la possibilità di provare questo:

Stai usando il binario compilato con il sistema Java (che sul tuo sistema è 1.6), quindi se rimuovi Java 1.6 lo interromperò. Se si desidera utilizzare Java 1.7, sarà necessario riconfigurare R per Java 1.7 e ricompilare rJava per utilizzare tali impostazioni. Si noti che Java di Oracle vive in una posizione completamente diversa (/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk) rispetto al sistema Java (/System/Library/Frameworks/JavaVM.framework), quindi non è intercambiabile.

Inoltre, Oracle Java 1.7 non è un framework, è un grosso casino che non è stato progettato per OS X, quindi è necessario impostarlo a mano su impostazioni come su Linux – è piuttosto doloroso. Inoltre richiede overrides … quindi se vuoi davvero andare giù nella tana del rabbitmq, questo è quello che ha funzionato per me:

 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 

Quindi installare rJava dai sorgenti (R64 -> install.packages (“rJava”, type = ‘source’)). Si noti che è solo a 64 bit, quindi funzionerà solo con R. a 64 bit.

Questo funziona per me:

La situazione è che le mie directory Java non erano configurate correttamente.

1) Prima esecuzione: sudo R CMD javareconf . Dovrebbe essere il seguente:

 Java interpreter : /usr/bin/java Java version : 1.7.0_40 Java home path : /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre Java compiler : /usr/bin/javac Java headers gen.: /usr/bin/javah Java archive tool: /usr/bin/jar Non-system Java on OS X trying to compile and link a JNI progam detected JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm llvm-gcc-4.2 -arch x86_64 -std=gnu99 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/../include/darwin -I/usr/local/include -fPIC -mtune=core2 -g -O2 -c conftest.c -o conftest.o llvm-gcc-4.2 -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation JAVA_HOME : /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre Java library path: $(JAVA_HOME)/lib/server JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm Updating Java configuration in /Library/Frameworks/R.framework/Resources Done. 

2) In R, eseguire: install.packages("rJava",type='source') . L’installazione dovrebbe restituire DONE (rJava). Si noti che, ho dovuto impostare

 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home 

quando ho bisogno di avviare R come root: sudo R. Per eseguire come utente normale, utilizzare

 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre 

Mi è capitato di non aver impostato i link simbolici di / usr / bin / java * in quello corrispondente in Java 1.7 (diretto invece alla versione 1.6) e ottenuto tutta la frustrazione da lì. I collegamenti dovrebbero essere come questo: (sembra che solo in Java siano richiesti java, javac, javah e jar).

 $ ls -l /usr/bin/ja* lrwxr-xr-x 1 root wheel 71 Oct 3 11:44 /usr/bin/jar -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/jar lrwxr-xr-x 1 root wheel 77 Oct 3 12:14 /usr/bin/jarsigner -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/jarsigner lrwxr-xr-x 1 root wheel 72 Oct 3 11:44 /usr/bin/java -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/java lrwxr-xr-x 1 root wheel 73 Oct 3 11:42 /usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javac lrwxr-xr-x 1 root wheel 75 Oct 3 12:15 /usr/bin/javadoc -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javadoc lrwxr-xr-x 1 root wheel 73 Oct 3 11:44 /usr/bin/javah -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javah lrwxr-xr-x 1 root wheel 73 Oct 3 12:15 /usr/bin/javap -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javap lrwxr-xr-x 1 root wheel 74 Oct 3 12:15 /usr/bin/javaws -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javaws 

Finalmente qualcosa ha funzionato!

Simon Urbanek: puoi inserire queste istruzioni nel sito Web di rJava / istruzioni di installazione di cran …? Questa è la prima volta che sono stato in questa tana del rabbitmq e sono sicuro di non essere l’unico.

 JAVA_LD_LIBRARY_PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server JAVA_LIBS='-L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server -ljvm' JAVA_CPPFLAGS='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin' R CMD javareconf Java interpreter : /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/bin/java Java version : 1.8.0_77 Java home path : /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home Java compiler : /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/javac Java headers gen.: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/javah Java archive tool: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/jar System Java on OS X trying to compile and link a JNI program detected JNI cpp flags : -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin detected JNI linker flags : -L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server -ljvm clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -fPIC -Wall -mtune=core2 -g -O2 -c conftest.c -o conftest.o clang -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 -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.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_77.jdk/Contents/Home Java library path: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server JNI cpp flags : -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin JNI linker flags : -L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server -ljvm Updating Java configuration in /Library/Frameworks/R.framework/Resources override rw-r--r-- root/admin for /Library/Frameworks/R.framework/Resources/etc/Makeconf? (y/n [n]) y override rw-r--r-- root/admin for /Library/Frameworks/R.framework/Resources/etc/ldpaths? (y/n [n]) y Done. R CMD INSTALL rJava_0.9-9.tar.gz