解决办法:
从Oraclejdk 目录里可执行文件链接都复制到自己的LINK目录,然后IDE使用LINK变量下的命令
本文没有具体解决方法,只有探索思路................................
如果想替换系统openjdk,请参考:
Linux(Deepin)下配置java8 - L141210113的专栏 - CSDN博客(不过官网jdk8现在需要登录才能下载,jdk11、12不用登录)
以下为过程思路:
发行版系统:Deepin15.9 (为什么?漂亮不折腾)
一直知道这个情况,但使用正常就没去理他,直到今天:
VSCode给我报了个错误
1 cd "/home/××/Documents/0vscode/java/" && javac -encoding UTF-8 MidiDance1.java && java MidiDance1
2
3 Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
4 Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
5 Error: LinkageError occurred while loading main class MidiDance1
6 java.lang.UnsupportedClassVersionError: MidiDance1 has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 54.0
报错
所以解决它...
百分百确定是Openjdk自带的jre和Oracle的冲突,看这里:
$ sudo update-alternatives --config java [sudo] ×× 的密码: 链接组 java (提供 /usr/bin/java)中只有一个候选项:/usr/lib/jvm/java-10-openjdk-amd64/bin/java 无需配置。
$ ls /usr/lib/jvm/
default-java java-10-openjdk-amd64 java-1.10.0-openjdk-amd64 jdk-11.0.2
其中jdk-11.0.2 是我自己装的OracleJdk目录
可知系统是默认配置一个openjdk的jre环境了
// 问题应该在这个目录,进去看看 $ cd /usr/lib/jvm/
// default这个目录有点默认使用的意味,ls详细看看
$ ls -l default-java/bin/
总用量 216
-rwxr-xr-x 1 root root 10520 5月 6 2018 java
-rwxr-xr-x 1 root root 10600 5月 6 2018 jjs
-rwxr-xr-x 1 root root 10560 5月 6 2018 keytool
-rwxr-xr-x 1 root root 10608 5月 6 2018 orbd
-rwxr-xr-x 1 root root 10560 5月 6 2018 pack200
-rwxr-xr-x 1 root root 10552 5月 6 2018 rmid
-rwxr-xr-x 1 root root 10560 5月 6 2018 rmiregistry
-rwxr-xr-x 1 root root 10560 5月 6 2018 servertool
-rwxr-xr-x 1 root root 10616 5月 6 2018 tnameserv
-rwxr-xr-x 1 root root 107920 5月 6 2018 unpack200
文件权限之后的数字代表类型,1是link文件链接类型,
也就是说系统默认使用了这个链接,所以也就印证了VSCode里调用的报错。
那更改java链接就行了?等等,看清楚点比较好
$ ls -l default-java
lrwxrwxrwx 1 root root 25 5月 1 2018 default-java -> java-1.10.0-openjdk-amd64
原来这个default-java才是一个链接
$ ls -l java-1.10.0-openjdk-amd64
lrwxrwxrwx 1 root root 21 5月 6 2018 java-1.10.0-openjdk-amd64 -> java-10-openjdk-amd64
等等....这....看来得把所有主要目录都列出来
$ ls -l
总用量 8
lrwxrwxrwx 1 root root 25 5月 1 2018 default-java -> java-1.10.0-openjdk-amd64
drwxr-xr-x 7 root root 4096 1月 24 15:41 java-10-openjdk-amd64
lrwxrwxrwx 1 root root 21 5月 6 2018 java-1.10.0-openjdk-amd64 -> java-10-openjdk-amd64
drwxr-xr-x 8 668 668 4096 1月 22 10:47 jdk-11.0.2
所以看懂了,为什么这么蛋疼的链接呢?那肯定是为了兼容性,查了一下: jdk10 也叫 jdk1.10 (目前 jdkxx 都叫 jdk1.xx)
Ps. 闲的没事多 ls -l 会有很多发现
然后找出 全局可执行命令“java” 的位置
$ type java
java 是 /usr/bin/java
$ which java
/usr/bin/java
$ whereis java
java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/jdk-11.0.2/bin/java /usr/share/man/man1/java.1.gz
$ whereis -b java
java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/jdk-11.0.2/bin/java
得出位置是/usr/bin/ ,那ls一下
$ ls -l /usr/bin/ | grep java
lrwxrwxrwx 1 root root 22 1月 24 15:43 java -> /etc/alternatives/java
蛋疼得受不了了,继续ls
$ ls -l | grep java
lrwxrwxrwx 1 root root 43 1月 24 15:43 java -> /usr/lib/jvm/java-10-openjdk-amd64/bin/java
lrwxrwxrwx 1 root root 53 1月 24 15:43 java.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/java.1.gz
lrwxrwxrwx 1 root root 44 1月 24 15:43 jexec -> /usr/lib/jvm/java-10-openjdk-amd64/lib/jexec
lrwxrwxrwx 1 root root 49 1月 24 15:43 jexec-binfmt -> /usr/lib/jvm/java-10-openjdk-amd64/lib/jar.binfmt
lrwxrwxrwx 1 root root 42 1月 24 15:43 jjs -> /usr/lib/jvm/java-10-openjdk-amd64/bin/jjs
lrwxrwxrwx 1 root root 52 1月 24 15:43 jjs.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/jjs.1.gz
lrwxrwxrwx 1 root root 46 1月 24 15:43 keytool -> /usr/lib/jvm/java-10-openjdk-amd64/bin/keytool
lrwxrwxrwx 1 root root 56 1月 24 15:43 keytool.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/keytool.1.gz
lrwxrwxrwx 1 root root 43 1月 24 15:43 orbd -> /usr/lib/jvm/java-10-openjdk-amd64/bin/orbd
lrwxrwxrwx 1 root root 53 1月 24 15:43 orbd.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/orbd.1.gz
lrwxrwxrwx 1 root root 46 1月 24 15:43 pack200 -> /usr/lib/jvm/java-10-openjdk-amd64/bin/pack200
lrwxrwxrwx 1 root root 56 1月 24 15:43 pack200.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/pack200.1.gz
lrwxrwxrwx 1 root root 43 1月 24 15:43 rmid -> /usr/lib/jvm/java-10-openjdk-amd64/bin/rmid
lrwxrwxrwx 1 root root 53 1月 24 15:43 rmid.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/rmid.1.gz
lrwxrwxrwx 1 root root 50 1月 24 15:43 rmiregistry -> /usr/lib/jvm/java-10-openjdk-amd64/bin/rmiregistry
lrwxrwxrwx 1 root root 60 1月 24 15:43 rmiregistry.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/rmiregistry.1.gz
lrwxrwxrwx 1 root root 49 1月 24 15:43 servertool -> /usr/lib/jvm/java-10-openjdk-amd64/bin/servertool
lrwxrwxrwx 1 root root 59 1月 24 15:43 servertool.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/servertool.1.gz
lrwxrwxrwx 1 root root 48 1月 24 15:43 tnameserv -> /usr/lib/jvm/java-10-openjdk-amd64/bin/tnameserv
lrwxrwxrwx 1 root root 58 1月 24 15:43 tnameserv.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/tnameserv.1.gz
lrwxrwxrwx 1 root root 48 1月 24 15:43 unpack200 -> /usr/lib/jvm/java-10-openjdk-amd64/bin/unpack200
lrwxrwxrwx 1 root root 58 1月 24 15:43 unpack200.1.gz -> /usr/lib/jvm/java-10-openjdk-amd64/man/man1/unpack200.1.gz
原来bin路径下都是链接,我....
赶紧必应搜索多几下
linux中如何查看命令所在目录_百度经验
原因找到了,那我们就.... Linux不太可能给你集成你用不到的功能,所以Openjdk应该和系统相关,不能卸载作死...
解决方案:
我们只是用IDE编程时运行一下,还是在IDE里改吧,
先看一下自己安装的jdk目录
:/usr/lib/jvm/jdk-11.0.2/bin$ ls -l
总用量 508
-rwxr-xr-x 1 668 668 12952 1月 18 13:36 jaotc
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jar
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jarsigner
-rwxr-xr-x 1 668 668 8672 1月 18 13:36 java
-rwxr-xr-x 1 668 668 8784 1月 18 13:36 javac
-rwxr-xr-x 1 668 668 8784 1月 18 13:36 javadoc
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 javap
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jcmd
-rwxr-xr-x 1 668 668 12888 1月 18 13:36 jconsole
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jdb
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jdeprscan
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jdeps
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jhsdb
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jimage
-rwxr-xr-x 1 668 668 12880 1月 18 13:36 jinfo
-rwxr-xr-x 1 668 668 8784 1月 18 13:36 jjs
-rwxr-xr-x 1 668 668 8784 1月 18 13:36 jlink
-rwxr-xr-x 1 668 668 12880 1月 18 13:36 jmap
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jmod
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jps
-rwxr-xr-x 1 668 668 8792 1月 18 13:36 jrunscript
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jshell
-rwxr-xr-x 1 668 668 12880 1月 18 13:36 jstack
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jstat
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 jstatd
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 keytool
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 pack200
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 rmic
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 rmid
-rwxr-xr-x 1 668 668 8744 1月 18 13:36 rmiregistry
-rwxr-xr-x 1 668 668 8736 1月 18 13:36 serialver
-rwxr-xr-x 1 668 668 117704 1月 18 13:36 unpack200
和系统Openjdk结构差不多,bin目录下都是可执行文件的链接
Linux下的softlink和hardlink - yasaken - CSDN博客
具体解决方案:
从安装的Oraclejdk 目录里找可执行文件链接所在的bin目录,把bin目录下的链接文件copy到自己的javaLinkBin目录下
把可执行链接都复制到自己的目录:
/usr/lib/jvm/jdk-11.0.2$ cp bin/* /home/xx/Documents/javaLinkBin/
然后把IDE里调用jdk的命令都加上完整路径,
修改IDE里的运行命令如:
java 改为 /home/xx/Document/javaLinkBin/java
javac 改为 /home/xx/Document/javaLinkBin/javac
当然更好的方法是设置一个变量,例如
MY_JDKLINK="/home/xx/Document/javaLinkBin/"
然后IDE配置写 $MY_JDKLINK/java即可
-End-
Ps.最近百度挺讨厌的,还我必应主域名,不还就用官方第二域名:https://www2.bing.com https://www4.bing.com |