【问题标题】:Resolving version conflict between java and javac on Ubuntu解决 Ubuntu 上 java 和 javac 之间的版本冲突
【发布时间】:2012-05-14 14:15:12
【问题描述】:

我在 Ubuntu 上编译的 Java 应用程序有问题。它抛出UnsupportedClassVersionError。 我正在使用比在我的 PATH 中配置的版本更高的 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)

我该如何解决这个问题?

【问题讨论】:

  • 您可能更愿意在askubuntu.com 上问这个问题无论如何,请检查安装了哪些 java 包,如果还安装了 jre v1.7,您可能需要配置与“替代品”一起使用的版本
  • 或者,尝试使用-target 1.6-source 1.6 进行编译。

标签: ubuntu java javac openjdk unsupported-class-version


【解决方案1】:

在终端输入以下命令:

  sudo update-alternatives --config java

它会要求你:

替代 java 有 2 种选择(提供 /usr/bin/java)。

  Selection      Path                                            Priority   Status

    0           /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      auto mode

    1           /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode

    2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java  1051      manual mode


  Press enter to keep the current choice[*], or type selection number:

我输入 2 因为我想使用 java 1.7.0_21

【讨论】:

  • 这个选项在 Ubuntu 18.04 上对我有用
【解决方案2】:

您还需要这样做:

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

【讨论】:

    【解决方案3】:

    运行以下任一命令以找到该位置的位置

    javac 1.7.0_147
    

    按如下方式使用:

    whereis javac
    

     locate javac
    

    find javac
    

    然后,一旦你找到了目录,就象征性地和强制地将 bin 内容链接到 /usr/bin:

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

    【讨论】:

    • 我遇到了同样的问题,但是当我尝试这个时,我得到了一个新的、不同的错误:“符号链接的级别太多”
    • -1,请不要尝试这个答案。我认为应该取消选择它作为接受的答案。这很可能会通过在 /usr/bin 目录中创建无法删除的循环符号链接而导致您的机器不可逆转地混乱!
    • @Paul 这个答案是针对javac/usr/bin不是 的人。如果[put location here]/bin 原来是/usr/bin,那么该命令将变得完全荒谬,您应该知道 - 如果您尝试理解此解决方案而不是盲目应用它
    • 我想这是真的。我不是故意冒犯的,我觉得这个答案还是有用的。但也许我的公开愚蠢会阻止其他人犯同样的错误。
    【解决方案4】:

    这就是你想要的Java and Ubuntu。我基本上有相同的配置,但我在 Glassfish 和 Java7 之间来回切换。看看并尝试以类似的方式设置您的 Java 环境

    【讨论】:

      【解决方案5】:

      我已经添加并安装了 Java 和 Javac 的替代品,以下步骤对我有用:

      步骤 1添加 Java 和 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
      

      即:/opt/amazon-jdk-11/bin/javac 是 javac 的新路径

      步骤 2安装 Java 和 Javac 替代品

      sudo update-alternatives --config javac
      sudo update-alternatives --config javac
      

      输入上述命令后,您将看到如下所示的屏幕,您可以选择要配置 java 的号码。

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

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

      which javacwhich java 你会看到如下画面:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-02
        • 2018-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多