AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 740757
Accepted
mcExchange
mcExchange
Asked: 2016-03-02 02:05:08 +0800 CST2016-03-02 02:05:08 +0800 CST 2016-03-02 02:05:08 +0800 CST

在多个 java 版本之间切换

  • 772

在 Ubuntu 14.04 上安装 Android Studio 时,我收到我的 Java 版本 ( javac 1.7.0_79) 导致问题的消息。我找到了如何安装 Java 的较新 Oracle 版本的解决方案:

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

但是,我担心这可能会覆盖我现有open-jdk的 Java 版本。由于我不知道我的哪些程序依赖于 Java,我担心这可能会使这些其他程序崩溃。

有没有办法确保apt-get不会覆盖我以前的 Java?我基本上希望两者都安装并能够在它们之间手动切换,具体取决于我需要的版本。

java
  • 6 6 个回答
  • 385404 Views

6 个回答

  • Voted
  1. Best Answer
    danzel
    2016-03-02T03:42:54+08:002016-03-02T03:42:54+08:00

    Apt-get 不会覆盖现有的 java 版本。

    要在已安装的 java 版本之间切换,请使用该update-java-alternatives命令。

    列出所有 java 版本:

    update-java-alternatives --list
    

    将 java 版本设置为默认值(需要 root 权限):

    sudo update-java-alternatives --set /path/to/java/version
    

    ...其中/path/to/java/version是上一个命令列出的其中之一(例如/usr/lib/jvm/java-7-openjdk-amd64)。


    附加信息:

    update-java-alternatives是一个方便的工具,它使用Debian的替代系统(update-alternativesjavajavac

    • 180
  2. muet
    2016-11-04T17:13:25+08:002016-11-04T17:13:25+08:00

    利用

    sudo update-alternatives --config java
    

    它列出了所有已安装的版本并标记了当前活动版本,并提供了用于切换的对话框:

    There are 3 choices for the alternative java (providing /usr/bin/java).
    
    Selection    Path...
    ------------------------------------------------------------
      0            /usr/lib/jvm/java-9-oracle/bin/java...
    * 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
      2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
      3            /usr/lib/jvm/java-9-oracle/bin/java...
    
    Press <enter> to keep...[*], or type selection number: 
    

    利用

    export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"
    

    $JAVA_HOME从当前活动版本 设置

    • 121
  3. naXa stands with Ukraine
    2018-05-15T14:15:19+08:002018-05-15T14:15:19+08:00

    配置 Java

    您可以通过 using 配置在命令行中使用的默认版本update-alternatives,它管理哪些符号链接用于不同的命令。

    sudo update-alternatives --config java
    

    输出将如下所示。

    There are 5 choices for the alternative java (providing /usr/bin/java).
    
      Selection    Path                                            Priority   Status
    ------------------------------------------------------------
    * 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
      1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
      2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
      3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
      4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
      5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode
    
    Press <enter> to keep the current choice[*], or type selection number:
    

    您现在可以选择要用作默认值的数字。这也可以用于其他 Java 命令,例如编译器 ( javac)、文档生成器 ( javadoc)、JAR 签名工具 ( jarsigner) 等等。您可以使用以下命令,填写您要自定义的命令。

    sudo update-alternatives --config command

    设置JAVA_HOME环境变量

    许多程序(例如 Java 服务器)使用 JAVA_HOME 环境变量来确定 Java 安装位置。

    从您喜欢的安装中复制路径,然后使用 Sublime Text 或您喜欢的文本编辑器打开 /etc/environment。

    sudo subl /etc/environment
    

    在此文件的末尾,添加以下行,确保将突出显示的路径替换为您自己复制的路径。

    JAVA_HOME="/usr/lib/jvm/java-8-oracle"
    

    保存并退出文件,然后重新加载它:source /etc/environment.
    您现在可以通过执行以下命令来测试是否已设置环境变量:echo $JAVA_HOME. 这将返回您刚刚设置的路径。

    • 14
  4. brianjohnsen
    2017-01-25T01:14:07+08:002017-01-25T01:14:07+08:00

    根据@muet 的回答,我发现这可以无缝地工作:

    将此添加到~/.bashrc:

    export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"
    

    添加到别名:

    alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
    alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'
    

    然后,您可以仅使用以下方式在同一 shell 中切换:useJava7或useJava8

    • 11
  5. Rahul Chandak
    2020-06-02T12:29:24+08:002020-06-02T12:29:24+08:00

    jrunscript在未来的版本中可能不可用,因此 export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))按照@ThiamTeck 的建议使用安全的选择。每次使用命令更改 java 版本时也.bashrc需要执行。update-alternative

    • 0
  6. mapto
    2021-07-13T23:20:00+08:002021-07-13T23:20:00+08:00

    galternatives还可以考虑使用通过 ubuntu 包管理器提供的 GUI 工具。

    • 0

相关问题

  • 如何使用类似 Qt 的 UI 在 KDE 中运行 Java 应用程序?

  • 如何安装 Minecraft?

  • 如何从命令行重新启动 java/flash?

  • Java和ALSA问题[关闭]

  • 无法安装 openSDK 6 - ubuntu 10.04

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve