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)
install.packages 関数と R 2.15.2 のコマンド ライン インストールの両方を使用して rJava をインストールしました。エラーは発生しません。
$ 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 Preferences を使用して 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 に特別なエントリが必要ですか?
Versions ディレクトリは 1.7 用に調整する必要がありますか? CurrentJDK が 1.6 にマップされているのに、Current が A になり、最終的に 1.7 になるのは奇妙です。
$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
1.7 ファイルを直接指すパスまたは /usr/bin/java パスを指定して R CMD javareconf を実行しても、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 リストで質問したところ、Simon Urbanek から次のような回答がありました。Windows と Linux で Java 1.7 をソースからコンパイルする必要があるという同じ問題はないと思います。Windows と Linux でこれを実行しており、rJava をコンパイルする必要がなかったためです。これを試す機会があれば、また報告します。
システムJava(システムでは1.6)に対してコンパイルされたバイナリを使用しているため、Java 1.6を削除すると、それが壊れます。Java 1.7 を使用する場合は、R を Java 1.7 用に再構成し、rJava を再コンパイルしてそれらの設定を使用する必要があります。Oracle の Java は、システム Java (/System/Library/Frameworks/JavaVM.framework) とはまったく異なる場所 (/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk) に存在するため、互換性がないことに注意してください。
さらに、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",type='source'))。これは 64 ビットのみであるため、64 ビットの R でのみ動作することに注意してください。