I recently "upgraded" from OSX Mountain Lion to Yosemite and from R 3.1.3 to 3.2. Immediately after the upgrade, when I opened R or RStudio I got a pop-up message saying that I needed to install Java 6. In addition, loading rJava
or any package that depends on rJava (e.g., xlsx
) caused RStudio to crash (R also crashed when I tried this by opening R.app
directly).
After trying a few fixes found on Stack Overflow and elsewhere (more details below), I am at a point where loading rJava
or any package that depends on rJava
no longer causes R to crash, but results in the following error:
library(rJava)
Error : .onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so':
dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so
Reason: image not found
Error: package or namespace load failed for ‘rJava’
However, if I invoke R from the command line and then load rJava
or any package that depends on rJava
, it seems to work (or at least I don't get any error messages).
I've tried a number of different attempted fixes, some of them a few times, and can't quite remember exactly what I did in what order (didn't realize this would be such a morass and wasn't really keeping track), but here's the gist of it:
Added the following to my
.bash_profile
(per this SO answer):export JAVA_HOME="/usr/libexec/java_home -v 1.8"
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/serverReconfigured java from the command line as follows:
sudo R CMD javareconf -n
Checked
options("java.home")
and discovered this was set toNULL
. I tried setting it to the following (per this SO question):options("java.home"="/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre")
Installed the latest Java Development Kit and reinstalled
rJava
from source (can't remember where I found that one).
At some point while trying all of these, I was able to load rJava
without crashing R, but instead got the error message posted above. In addition, when I quit RStudio, it would seem to close normally, but then an "RStudio quit unexpectedly" message would pop up, indicating that the program had crashed while trying to close.
I finally decided to install Java for OS X 2014-001 (Java 6), as I seemed to be running out of options. Now, when I opened R or RStudio the "This software needs Java 6" pop-up message no longer appeared. However, I was still getting the .onLoad failed in loadNamespace() for 'rJava'
error message posted above.
In reviewing some of the posts I'd already looked at, I noticed another SO answer that I'd missed before, which recommended opening RStudio with the following command line code that gives RStudio the correct path to java:
LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudio
That opened an RStudio window and I was also able to load rJava
and packages that depend on it without getting an error.
Lastly, I tried running R from the command line (which I hadn't done before). It turns out that on the command line, loading rJava
or any package that depends on rJava
works and does not throw any errors.
So, I can now get rJava
to work if I open RStudio from the command line with the code that gives RStudio the java path (as noted above). However, I'd like to find a way to fix the underlying problem, whatever it may be, so that RStudio can be opened in the usual Mac way, without needing a command line kludge. I'm also concerned that having an old version of Java installed could cause problems down the road.
Does anyone have any ideas about how to diagnose and solve this issue?
On macOS High Sierra (10.13.1) and Java Version 9 you have to use a slightly different JVM path (notice the missing
jre
folder in the path compared to the instructions for earlier Java versions):You also have to notify R about the JVM:
Following command works:
After that, in RStudio, loading rJava works through loading of the "xlsx" package.
P.S. #1 Environment: Mac OS X El Capitan 10.11.3+ with RStudio 0.99.491+ and R 3.2.3+. (I've now tested this also on macOS Sierra (10.12) and R.3.3.1.)
P.S. #2 I find that
openxlsx
is much faster and doesn't rely on Java to work, so I'm now using that package. Hope that helps others.This is how I configured it working properly on two Macs running Mac OS X El Capitan (10.11.6):
Uninstall 'rJava' by issuing the following commands in a terminal window:
Download and install the Java software from Oracle: https://www.java.com/en/download/mac_download.jsp
Add the following lines to
/Users/<userid>/.bashrc
using your favorite editor:Close and restart any terminal, R, and RStudio windows (to pick up the changes to
.bashrc
).Run the following command in a Terminal window:
Run the following command in a Terminal window:
Run the following on the command line:
sudo R CMD javareconf
Several solutions above have mentioned this, but they also suggest that one remove and subsequently re-install the
rJava
package. I found those additional steps to be unnecessary.Here you can download the legacy Java version 6 for El Capitan: https://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US After doing so, the rJava package works for me.
On OSX El Capitan 10.11, the user doesn't have permission to write to /usr/lib. So instead, use the following command: