как заставить rJava 0.9-3 работать на OS X 10.7.4 с Oracle Java 1.7?
Есть ли кто-нибудь, кому удалось заставить rJava 0.9-3 работать на OS X 10.7.4 с 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)
мы установили rJava, используя как функцию install.packages, так и установку из командной строки с помощью R 2.15.2. Я нене получить никаких ошибок.
$ R CMD INSTALL rJava
* installing to library ‘/Library/Frameworks/R.framework/Versions/2.15/Resources/library’
* installing *binary* package ‘rJava’ ...
* DONE (rJava)
$
Если я использую Java Preferences, чтобы поставить 1.7 первым в списке, но оставить 1.6 "на", rJava всегда запускается 1.6.
Если я использую настройки Java, чтобы сначала установить 1.7 и выключить 1.6, rJava сделает это:
> 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
>
Однако, используя системную функцию, R сам находит 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 специальная запись в /System/Library/Java/JavaConfig.plist?
Нужно ли подправлять каталог версий для 1.7? Странно, что Current идет к A, который заканчивается на 1.7, а CurrentJDK отображается на 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
Даже если R CMD javareconf работает с путем, указывающим на файлы 1.7 напрямую или на пути / usr / bin / java, rJava все еще может 'найти или запустить Java 1.7.
1.7 нужен ли набор переменных 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
Спасибо за любую помощь
Обновление 1:
Я спросил об этом в списке stats-rosuda-devel и получил следующий ответ от Саймона Урбанека. Я неЯ думаю, что Windows и Linux имеют одинаковые проблемы с необходимостью компиляции из исходного кода для Java 1.7, так как мызапустить это на Windows и Linux и ненужно компилировать rJava. Я'Я сообщу, как только у меня будет возможность попробовать это:
Вы используетедвоичный который скомпилирован с системой Java (которая в вашей системе 1.6) - так что если вы удалите Java 1.6, вы 'сломаю это. Если вы хотите использовать Java 1.7, вы 'Придется переконфигурировать R для Java 1.7 и пересобрать rJava, чтобы использовать эти настройки. Обратите внимание, что Oracle 's Java живет в совершенно другом месте (/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk), чем системная Java (/System/Library/Frameworks/JavaVM.framework), поэтому она не взаимозаменяема.
Кроме того, Oracle Java 1.7 не является основой, этоЭто большой беспорядок, который на самом деле не был разработан для OS X, поэтому вы должны установить его вручную, как в Linux - этодовольно больно. Также это требует переопределений ... так что, если вы действительно хотите пройти по кроличьей норе, вот что сработало для меня:
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
Затем установите rJava из исходников (R64 -> install.packages (»rJava», Тип =»источник')). Обратите внимание, что этоs только 64-битный, поэтому он будет работать только с 64-битным R.