在Ubuntu上解决java和javac之间的版本冲突

在Ubuntu上解决java和javac之间的版本冲突,ubuntu,java,javac,openjdk,unsupported-class-version,Ubuntu,Java,Javac,Openjdk,Unsupported Class Version,我在Ubuntu上编译的Java应用程序有问题。它抛出不受支持的ClassVersionError。 我使用的JDK版本高于在我的路径中配置的运行Java的版本: $ javac -version javac 1.7.0_147 $ java -version java version "1.6.0_23" OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2) OpenJDK Client VM

我在Ubuntu上编译的Java应用程序有问题。它抛出
不受支持的ClassVersionError
。 我使用的JDK版本高于在我的路径中配置的运行Java的版本:

$ javac -version
javac 1.7.0_147

$ java -version
java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK Client VM (build 20.0-b11, mixed mode, sharing)

如何解决此问题?

这是您想要的。我基本上有相同的配置,但我正在从Glassfish和Java7来回切换。看一看,然后尝试以类似的方式设置Java环境

运行以下任一操作,以找到该环境的位置

javac 1.7.0_147
使用方法如下:

whereis javac

找到目录后,将bin内容以符号方式强制链接到/usr/bin:

sudo ln -f -s [put location here]/bin/* /usr/bin

在终端中键入以下命令:

  sudo update-alternatives --config java
它将要求您:

备选java有两种选择(提供/usr/bin/java)


我输入2,因为我想使用java 1.7.0_21,您还需要执行以下操作:

sudo update-alternatives --config javac
从提供的列表中选择所需的java编译器。例如在Centos 5上

There are 2 programs which provide 'javac'.
Selection    Command
-----------------------------------------------
1           /usr/lib/jvm/java-1.6.0-openjdk/bin/javac
*+ 2        /usr/lib/jvm/java-1.7.0-openjdk/bin/javac

我已经添加并安装了Java和Javac的替代方案,其中包括以下步骤:

步骤1添加Java和Javac备选方案

sudo update-alternatives --config javac
sudo update-alternatives --config javac
添加Javac的命令:

sudo update-alternatives --install "/usr/bin/java" "java" "/opt/amazon-jdk-11/bin/java" 1 
即:“/opt/amazon-jdk-11/bin/javac”这是java的新路径

sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/amazon-jdk-11/bin/javac" 1
i、 e:/opt/amazon-jdk-11/bin/javac是javac的新路径

步骤2安装了Java和Javac替代方案

sudo update-alternatives --config javac
sudo update-alternatives --config javac
输入上述命令后,您将能够看到如下屏幕,您可以选择要配置java的编号

我在列表中选择了“1”作为我想要安装的javac“/opt/amazon-jdk-11/bin/java”

使用以下命令验证您的Java替代安装是否成功:

哪个javac
哪个java
您可以看到如下屏幕:


无论如何,你可能更愿意问这个问题,检查安装了哪些java软件包,如果也安装了jre v1.7,你可能需要配置使用“替代品”的版本。或者,尝试使用
-target 1.6
-source 1.6
编译。我也有同样的问题,但当我尝试这个时,我得到了一个新的,不同错误:“符号链接级别太多”-1,请不要尝试此答案。我认为它不应该被选为公认的答案。这很可能会在/usr/bin目录中创建无法删除的循环符号链接,从而导致机器不可逆转地混乱@保罗:这个答案是针对一个
javac
不在
/usr/bin
的人的。如果
[put location here]/bin
被证明是
/usr/bin
,那么这个命令就会变得非常可笑,你应该知道——如果你试图理解这个解决方案而不是盲目地应用它,我想这是真的。我不是有意冒犯,我认为答案仍然有用。但也许我在公众面前的愚蠢会阻止其他人犯同样的错误。这个选项在Ubuntu 18.04上对我有效
sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/amazon-jdk-11/bin/javac" 1
sudo update-alternatives --config javac
sudo update-alternatives --config javac