比如需要安装 jdk,选择自己的版本,如果你的电脑是苹果操作系统,你会发现仍然是有两个选择:
https://download.oracle.com/java/19/latest/jdk-19_macos-aarch64_bin.dmg ( sha256)
https://download.oracle.com/java/19/latest/jdk-19_macos-x64_bin.dmg ( sha256)
因为苹果电脑最近全面抛弃了传统的x86的64位芯片架构,转向了M1芯片是Arm 64 ,就比较麻烦。如果你有的M1芯片的Mac电脑,你肯定是会选择jdk-19_macos-aarch64_bin.dmg ,因为 它可以顺利安装。如果你一定要下载jdk-19_macos-x64_bin.dmg ,理论上你的电脑也会拒绝安装。
拒绝安装
这个符合逻辑,毕竟电脑是Arm 64架构所以应该是安装针对它的特殊定制化软件,抛弃传统的x86的64位芯片架构。
问题就在于,单方面抛弃它你会在其它地方碰壁,比如如果你在r里面需要使用rjava包,就会报错:
> library(rJava)
错误: package or namespace load failed for ‘rJava’:
loadNamespace()里算'rJava'时.onLoad失败了,详细内容:
调用: dyn.load(jvm, FALSE)
错误: 无法载入共享目标对象‘/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/server/libjvm.dylib’::
dlopen(/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/server/libjvm.dylib, 0x000A):
(mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))
很明显,这个r里面需要使用rjava包,但是它依赖于传统的x86的64位芯片架构的java,并不需要特殊定制化软件的java,但是你电脑拒绝安装传统的。看起来陷入了死局。
有意思的虽然我们的没办法安装比较新的java,但是可以安装比较旧的传统的x86的64位芯片架构的java
可以看到2019 ,而且这个时候M1芯片的Mac电脑还没有面世,所以压根就没得选,就只能说安装传统的x86的64位芯片架构的java:
传统的x86的64位芯片架构的java
果不其然,有了这个传统的x86的64位芯片架构的java,马上在r里面需要使用rjava包就没有问题了。总之就是各种折腾,我的电脑里面的jav都有了三个了:
ls -lh /Library/Java/JavaVirtualMachines
total 0
drwxr-xr-x 3 root wheel 96B 11 2 20:38 jdk-17.0.5.jdk
drwxr-xr-x 3 root wheel 96B 10 31 22:15 jdk-19.jdk
drwxr-xr-x 3 root wheel 96B 11 3 18:24 jdk1.8.0_351.jdk
r里面需要使用rjava包需要设置JAVA_HOME,代码如下所示:
h = '/Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home'
Sys.setenv(JAVA_HOME=h)
list.files(Sys.getenv("JAVA_HOME"))
我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是 jmzeng1314@163.com
如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.
十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。