解决办法:

从Oraclejdk 目录里可执行文件链接都复制到自己的LINK目录,然后IDE使用LINK变量下的命令

本文没有具体解决方法,只有探索思路................................

如果想替换系统openjdk,请参考:

Linux(Deepin)下配置java8 - L141210113的专栏 - CSDN博客(不过官网jdk8现在需要登录才能下载,jdk11、12不用登录)

以下为过程思路:

发行版系统:Deepin15.9 (为什么?漂亮不折腾)

一直知道这个情况,但使用正常就没去理他,直到今天:

VSCode给我报了个错误

 cd "/home/××/Documents/0vscode/java/" && javac -encoding UTF- MidiDance1.java && java MidiDance1

 Picked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
Error: LinkageError occurred while loading main class MidiDance1
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--openjdk-amd64 java-1.10.-openjdk-amd64 jdk-11.0.

其中jdk-11.0.2 是我自己装的OracleJdk目录

可知系统是默认配置一个openjdk的jre环境了

// 问题应该在这个目录,进去看看
$ cd /usr/lib/jvm/ // default这个目录有点默认使用的意味,ls详细看看 $ ls -l default-java/bin/
总用量
-rwxr-xr-x root root 5月 java
-rwxr-xr-x root root 5月 jjs
-rwxr-xr-x root root 5月 keytool
-rwxr-xr-x root root 5月 orbd
-rwxr-xr-x root root 5月 pack200
-rwxr-xr-x root root 5月 rmid
-rwxr-xr-x root root 5月 rmiregistry
-rwxr-xr-x root root 5月 servertool
-rwxr-xr-x root root 5月 tnameserv
-rwxr-xr-x root root 5月 unpack200

文件权限之后的数字代表类型,1是link文件链接类型,

也就是说系统默认使用了这个链接,所以也就印证了VSCode里调用的报错。

那更改java链接就行了?等等,看清楚点比较好

$ ls -l default-java
lrwxrwxrwx root root 5月 default-java -> java-1.10.-openjdk-amd64

原来这个default-java才是一个链接

$ ls -l java-1.10.-openjdk-amd64
lrwxrwxrwx root root 5月 java-1.10.-openjdk-amd64 -> java--openjdk-amd64

等等....这....看来得把所有主要目录都列出来

$ ls -l
总用量
lrwxrwxrwx root root 5月 default-java -> java-1.10.-openjdk-amd64
drwxr-xr-x root root 1月 : java--openjdk-amd64
lrwxrwxrwx root root 5月 java-1.10.-openjdk-amd64 -> java--openjdk-amd64
drwxr-xr-x 1月 : jdk-11.0.

所以看懂了,为什么这么蛋疼的链接呢?那肯定是为了兼容性,查了一下: 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./bin/java /usr/share/man/man1/java..gz $ whereis -b java
java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/jdk-11.0./bin/java

得出位置是/usr/bin/ ,那ls一下

$ ls -l /usr/bin/ | grep java
lrwxrwxrwx root root 1月 : java -> /etc/alternatives/java

蛋疼得受不了了,继续ls

$ ls -l | grep java
lrwxrwxrwx root root 1月 : java -> /usr/lib/jvm/java--openjdk-amd64/bin/java
lrwxrwxrwx root root 1月 : java..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/java..gz
lrwxrwxrwx root root 1月 : jexec -> /usr/lib/jvm/java--openjdk-amd64/lib/jexec
lrwxrwxrwx root root 1月 : jexec-binfmt -> /usr/lib/jvm/java--openjdk-amd64/lib/jar.binfmt
lrwxrwxrwx root root 1月 : jjs -> /usr/lib/jvm/java--openjdk-amd64/bin/jjs
lrwxrwxrwx root root 1月 : jjs..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/jjs..gz
lrwxrwxrwx root root 1月 : keytool -> /usr/lib/jvm/java--openjdk-amd64/bin/keytool
lrwxrwxrwx root root 1月 : keytool..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/keytool..gz
lrwxrwxrwx root root 1月 : orbd -> /usr/lib/jvm/java--openjdk-amd64/bin/orbd
lrwxrwxrwx root root 1月 : orbd..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/orbd..gz
lrwxrwxrwx root root 1月 : pack200 -> /usr/lib/jvm/java--openjdk-amd64/bin/pack200
lrwxrwxrwx root root 1月 : pack200..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/pack200..gz
lrwxrwxrwx root root 1月 : rmid -> /usr/lib/jvm/java--openjdk-amd64/bin/rmid
lrwxrwxrwx root root 1月 : rmid..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/rmid..gz
lrwxrwxrwx root root 1月 : rmiregistry -> /usr/lib/jvm/java--openjdk-amd64/bin/rmiregistry
lrwxrwxrwx root root 1月 : rmiregistry..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/rmiregistry..gz
lrwxrwxrwx root root 1月 : servertool -> /usr/lib/jvm/java--openjdk-amd64/bin/servertool
lrwxrwxrwx root root 1月 : servertool..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/servertool..gz
lrwxrwxrwx root root 1月 : tnameserv -> /usr/lib/jvm/java--openjdk-amd64/bin/tnameserv
lrwxrwxrwx root root 1月 : tnameserv..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/tnameserv..gz
lrwxrwxrwx root root 1月 : unpack200 -> /usr/lib/jvm/java--openjdk-amd64/bin/unpack200
lrwxrwxrwx root root 1月 : unpack200..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/unpack200..gz

原来bin路径下都是链接,我....

赶紧必应搜索多几下

linux中如何查看命令所在目录_百度经验

原因找到了,那我们就.... Linux不太可能给你集成你用不到的功能,所以Openjdk应该和系统相关,不能卸载作死...

解决方案:

我们只是用IDE编程时运行一下,还是在IDE里改吧,

先看一下自己安装的jdk目录

:/usr/lib/jvm/jdk-11.0./bin$ ls -l
总用量
-rwxr-xr-x 1月 : jaotc
-rwxr-xr-x 1月 : jar
-rwxr-xr-x 1月 : jarsigner
-rwxr-xr-x 1月 : java
-rwxr-xr-x 1月 : javac
-rwxr-xr-x 1月 : javadoc
-rwxr-xr-x 1月 : javap
-rwxr-xr-x 1月 : jcmd
-rwxr-xr-x 1月 : jconsole
-rwxr-xr-x 1月 : jdb
-rwxr-xr-x 1月 : jdeprscan
-rwxr-xr-x 1月 : jdeps
-rwxr-xr-x 1月 : jhsdb
-rwxr-xr-x 1月 : jimage
-rwxr-xr-x 1月 : jinfo
-rwxr-xr-x 1月 : jjs
-rwxr-xr-x 1月 : jlink
-rwxr-xr-x 1月 : jmap
-rwxr-xr-x 1月 : jmod
-rwxr-xr-x 1月 : jps
-rwxr-xr-x 1月 : jrunscript
-rwxr-xr-x 1月 : jshell
-rwxr-xr-x 1月 : jstack
-rwxr-xr-x 1月 : jstat
-rwxr-xr-x 1月 : jstatd
-rwxr-xr-x 1月 : keytool
-rwxr-xr-x 1月 : pack200
-rwxr-xr-x 1月 : rmic
-rwxr-xr-x 1月 : rmid
-rwxr-xr-x 1月 : rmiregistry
-rwxr-xr-x 1月 : serialver
-rwxr-xr-x 1月 : unpack200

和系统Openjdk结构差不多,bin目录下都是可执行文件的链接

Linux下的softlink和hardlink - yasaken - CSDN博客

具体解决方案:

从安装的Oraclejdk 目录里找可执行文件链接所在的bin目录,把bin目录下的链接文件copy到自己的javaLinkBin目录下

把可执行链接都复制到自己的目录:

/usr/lib/jvm/jdk-11.0.$  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

分析并解决Linux发行版的自带OpenJdk和自己安装的OracleJdk新旧版本冲突问题的更多相关文章

  1. Linux发行版及其目标用户

    1.Debian Debian 众所周知,是Deepin,Ubuntu和Mint等流行Linux发行版的母亲,这些发行版提供了可靠的性能,稳定性和无与伦比的用户体验.最新的稳定发行版是Debian 1 ...

  2. 常见Linux发行版有哪些?

    Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件.一般用户不需要重新编译,在直接安装之后,只 ...

  3. Embedded Linux Primer----嵌入式Linux基础教程--2.4节--嵌入式Linux发行版

    嵌入式Linux发行版 究竟什么是Linux发行版?在Linux内核引导之后,它期望找到并挂载根文件系统.当一个匹配的根文件系统已经挂载上,启动脚本开始运行大量程序和系统要求的工具.这些程序经常调用其 ...

  4. 最佳 Linux 发行版汇总

    Linux入门UbuntuUbuntu是一款基于Debian发行版,以Unity作为默认桌面环境的Linux操作系统.他是世界上最流行的发行版之一,每次发行,它都有提升.最新发行版为桌面.移动及其桌面 ...

  5. 全球最受欢迎的十大Linux发行版(图)

    帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...

  6. LFS 中文版手册发布:如何打造自己的 Linux 发行版

    您是否想过打造您自己的 Linux 发行版?每个 Linux 用户在他们使用 Linux 的过程中都想过做一个他们自己的发行版,至少一次.我也不例外,作为一个 Linux 菜鸟,我也考虑过开发一个自己 ...

  7. 顺手的Linux发行版及其工具推荐

    从Windows切换到Linux已经有半年多的时间了,简单给大家推荐一些个人感觉不错的软件,主要都是和开发相关的通用软件--- 0.archlinux  挑一个比较顺手的linux发行版当然是首要任务 ...

  8. Linux 桌面玩家指南:11. 在同一个硬盘上安装多个 Linux 发行版以及为 Linux 安装 Nvidia 显卡驱动

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  9. 什么是 Linux 发行版

    什么是Linux的发行版 就Linux的本质来说,它只是操作系统的核心,负责控制硬件.管理文件系统.程序进程等,并不给用户提供各种工具和应用软件.所谓工欲善其事,被必先利其器,一套在优秀的操作系统核心 ...

随机推荐

  1. MongoDB自学------(3)MongoDB文档操作

    一.插入文档 二.查询文档 三.更新文档 可以看到标题(title)由原来的 "Mongodb" 更新为了 "MongoDBtest". 以上语句只会修改第一条 ...

  2. Windows重要的win键

    win+↓ 当前窗口操作,多按几下就缩没了(同理,其他箭头也一样) win+e 打开此电脑 win+v 展开剪切板 win+k 访问蓝牙 win+a win10的通知 win+d (切到桌面,再用能切 ...

  3. re2c安装

    wget  https://kojipkgs.fedoraproject.org//packages/re2c/1.1.1/3.fc31/src/re2c-1.1.1-3.fc31.src.rpm 解 ...

  4. DGCNN

    架构总览 模型的整体架构源于 WebQA 的参考论文 Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Fact ...

  5. 【UOJ#82】【UR #7】水题生成器(贪心)

    [UOJ#82][UR #7]水题生成器(贪心) 题面 UOJ 题解 把\(n!\)的所有约数搜出来,这个个数不会很多. 然后从大往小能选则选就好了. #include<iostream> ...

  6. 【UOJ#75】【UR #6】智商锁(矩阵树定理,随机)

    [UOJ#75][UR #6]智商锁(矩阵树定理,随机) 题面 UOJ 题解 这种题我哪里做得来啊[惊恐],,, 题解做法:随机\(1000\)个点数为\(12\)的无向图,矩阵树定理算出它的生成树个 ...

  7. NET 判断是否为回文

    比如: 12321,第一位等于第五位,第二位等于第四位 /// <summary> /// 判断是否为回文 /// 比如:12321,第一位等于第五位,第二位等于第四位 /// </ ...

  8. laravel Method Illuminate\Validation\Validator::validateReuqired does not exist.

    Method Illuminate\Validation\Validator::validateReuqired does not exist. 此错误是由于我们在配置验证时,写错了关键字, publ ...

  9. ubuntu玩坏之后

    昨天,安装openssh-server的时候,与openssh-client冲突,故卸载openssh-client然后重装openssh-server解决问题. 今天,想装emacs,发现跟perl ...

  10. 批处理(bat)的一些记录

    总览:https://www.jb51.net/article/151923.htm 如何判断空格与回车的输入:https://www.lmdouble.com//113311107.html 设置命 ...