解决办法:

从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. Algorithm: Permutation & Combination

    组合计数 组合数学主要是研究一组离散对象满足一定条件的安排的存在性.构造及计数问题.计数理论是狭义组合数学中最基本的一个研究方向,主要研究的是满足一定条件的排列组合及计数问题.组合计数包含计数原理.计 ...

  2. jQuery 源码分析(五) map函数 $.map和$.fn.map函数 详解

    $.map() 函数用于使用指定函数处理数组中的每个元素(或对象的每个属性),并将处理结果封装为新的数组返回,该函数有三个参数,如下: elems Array/Object类型 指定的需要处理的数组或 ...

  3. Kafka学习笔记之Kafka High Availability(上)

    0x00 摘要 Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务.若该Broker永 ...

  4. C#,File.AppendAllLines(),换行"\r\n"

    string sourcePath = @"D:\GL\20160826141915999999.txt"; for (int i = 0; i < 10; i++) { G ...

  5. NET 线程可传递参数

    1.多线程执行方法 /// <summary> /// 随机数保存队列 /// </summary> private Queue<string> _randomQu ...

  6. python安装扩展”unable to find vcvarsall.bat“的解决办法

    产生原因: python3.4用的是msvs2010编译的,所以python3.4默认只能认出msvs2010以上版本 python2.7用的是msvs2008编译的,所以python2.7默认只能认 ...

  7. Java生鲜电商平台-电商促销业务分析设计与系统架构

    Java生鲜电商平台-电商促销业务分析设计与系统架构 说明:Java开源生鲜电商平台-电商促销业务分析设计与系统架构,列举的是常见的促销场景与源代码下载 左侧为享受促销的资格,常见为这三种: 首单 大 ...

  8. Java自学-集合框架 ArrayList常用方法

    ArrayList常用方法 步骤 1 : 增加 add 有两种用法: 第一种是直接add对象,把对象加在最后面 heros.add(new Hero("hero " + i)); ...

  9. js删除html标记 去掉所有html标记

    js删除html标记 去掉所有html标记 function delHtml(str){ return str.replace(/<[^>]+>/g,""); / ...

  10. Redis入门学习(二):下载安装

    Linux操作系统 Download, extract and compile Redis with: $ wget http://download.redis.io/releases/redis-4 ...