How change CurrentJDK symbolic link in MacOS

别来无恙 提交于 2020-01-21 05:42:26

问题


Currently in my Mac I have these JAVA versions:


MyMac$ cd /Library/Java/JavaVirtualMachines

$ ls -la

total 0

drwxr-xr-x 4 root wheel 136 17 Oct 11:21 .

drwxrwxr-x 5 root wheel 170 17 Oct 11:21 ..

drwxr-xr-x 3 root wheel 102 14 Jul 22:52 1.6.0.jdk

drwxr-xr-x 3 root wheel 102 17 Oct 11:16 jdk1.7.0_79.jdk


What I am trying to do is change the symbolic link to point to JDK 7 instead of JDK 6:


$cd /System/Library/Frameworks/JavaVM.framework/Versions

$ls -la

drwxr-xr-x 11 root wheel 374 17 Oct 11:21 .

drwxr-xr-x 10 root wheel 340 17 Oct 11:21 ..

lrwxr-xr-x 1 root wheel 10 17 Oct 11:21 1.4 -> CurrentJDK

lrwxr-xr-x 1 root wheel 10 17 Oct 11:21 1.4.2 -> CurrentJDK

lrwxr-xr-x 1 root wheel 10 17 Oct 11:21 1.5 -> CurrentJDK

lrwxr-xr-x 1 root wheel 10 17 Oct 11:21 1.5.0 -> CurrentJDK

lrwxr-xr-x 1 root wheel 10 17 Oct 11:21 1.6 -> CurrentJDK

lrwxr-xr-x 1 root wheel 10 17 Oct 11:21 1.6.0 -> CurrentJDK

drwxr-xr-x 8 root wheel 272 17 Oct 11:21 A

lrwxr-xr-x 1 root wheel 1 17 Oct 11:21 Current -> A

lrwxr-xr-x 1 root wheel 52 17 Oct 11:21 CurrentJDK -> /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents


Unfortunately I cannot remove the link. I am getting an operation not permitted error:

sudo rm CurrentJDK

rm: CurrentJDK: Operation not permitted

Any ideas?

Thank you!


回答1:


El Capitan new feature: System Integrity Protection (SIP), was the cause of this problem. I had to disable SIP first.

Follow these steps to disable SIP:

Restart your Mac. Before OS X starts up, hold down Command-R and keep it held down until you see an Apple icon and a progress bar. Release. This boots you into Recovery. From the Utilities menu, select Terminal. At the prompt type exactly the following and then press Return:

csrutil disable

Terminal should display a message that SIP was disabled. From the apple menu, select Restart. You can re-enable SIP by following the above steps, but using csrutil enable instead.




回答2:


If you're running OS X 10.11 (El Capitan), there is a new feature called "Rootless" which prevents editing of files under /System/ except by installers and the like. You may be able to solve whatever problem is requiring you to update the CurrentJDK symlink just by setting the JAVA_HOME environment variable to /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

If you truly want to modify that /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK symlink, you will likely have have to disable Rootless mode. You could also try running the Java 7 installer again, though I'm not certain that this will work

More information on the Rootless feature can be found here: https://apple.stackexchange.com/questions/193368/what-is-the-rootless-feature-in-el-capitan-really




回答3:


Steps that worked on macOS Catalina 10.15.2 and RStudio 1.2.5036

Install Java 11.0.1 from here (requires free account):

https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase11-5116896.html

Run javareconf

You probably need to run the command below, but RStudio seems not acknowledge the settings:

sudo R CMD javareconf 

Remove (if installed) and reinstall rJava from source

remove.packages("rJava") 
install.packages("rJava", type="source", repos="http://cran.rstudio.com")

Installing rJava from source seems to run a different configuration setup that will look for Java and it will display "checking Java support in R" as part of the output that seems accepted by RStudio.

Change ~/.Rprofile

This change to .Rprofile may also be necessary:

options(java.home="/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home")
Sys.setenv(DYLD_FALLBACK_LIBRARY_PATH="/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/")


来源:https://stackoverflow.com/questions/33186166/how-change-currentjdk-symbolic-link-in-macos

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!