如何按别名使用不同的java版本?

如何按别名使用不同的java版本?,java,bash,shell,Java,Bash,Shell,我有一些工具只能由Java8运行。所以我下载了java 8,但现在我同时安装了两个版本的java(os:Ubuntu): 我的问题是:是否可以用不同的别名来调用这两个版本?例如,我键入: “java”调用Java11(默认值)和 “java8”调用java8 你可以用几种方法来实现。最简单的方法是在配置文件初始化文件中放入以下两行: alias java='/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java' alias java8='/usr/li

我有一些工具只能由Java8运行。所以我下载了java 8,但现在我同时安装了两个版本的java(os:Ubuntu):

我的问题是:是否可以用不同的别名来调用这两个版本?例如,我键入:

  • “java”调用Java11(默认值)和
  • “java8”调用java8

    • 你可以用几种方法来实现。最简单的方法是在配置文件初始化文件中放入以下两行:

      alias java='/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java'
      alias java8='/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java'
      
      其他方式取决于您是否是机器管理员。您可以创建如下软链接:
      /usr/bin/java->/usr/lib/jvm/java-1.11.0-openjdk-amd64
      (不建议使用,因为系统中的某些工具可能依赖于
      /usr/bin/java


      更新:如果可以,尝试使用。使安装java版本和设置java\u HOME的工作变得简单。

      您也可以为java\u HOME执行此操作:

      alias java8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`"
      alias java11="export JAVA_HOME=`/usr/libexec/java_home -v 11`"
      
      更新: 要直接运行java,请使用:

      $ alias java8="`/usr/libexec/java_home -v 1.8`/bin/java"
      
      $ alias java11="`/usr/libexec/java_home -v 11`/bin/java"
      
      $ java8 -version
      
      java version "1.8.0_281"
      Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
      Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
      
      $ java11 -version
      
      openjdk version "11.0.2" 2019-01-15
      OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
      OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
      
      您也可以硬编码您的路径

      我有一些工具只能由Java8运行。所以我下载了Java8,但现在我同时安装了两个版本的java(os:Ubuntu)

      您可以使用别名来实现这一点(请参阅其他答案),但这存在一个问题,即只有shell才会尊重别名。。。然后,仅当它具有由shell定义或加载的别名时:

      • 别名不会通过环境继承

      • 工具的启动脚本是否会看到别名通常取决于是否将别名定义放入正确的shell init文件中

      • 应用程序的启动脚本也可能假定
        java8
        java11
        是真实(绝对或相对)路径名,并尝试通过文件系统解析它

      简而言之,在您的用例中使用别名很有可能不起作用


      因此,更好的办法是安排适当的Java位于命令搜索路径上。您可以通过多种不同的方式来实现这一点:

    • 您可以使用Ubuntu的“备选方案”系统在Java 8和Java 11之间进行全局切换
    • 您可以更新
      PATH
      变量,以便(例如)Java11可执行文件位于Java8可执行文件之前。这可以在shell init文件(每个用户或全局)、应用程序启动脚本中完成。。。或者用手
    • 您甚至可以将“/usr/bin/java”或任何内容替换为您想要使用的版本的直接符号链接。(这很粗糙,我不推荐。)注意“/usr/bin”中的Java命令项可能已经是符号链接了

    • type-ajava
      说什么?可能您已经有了
      java
      这是一个指向特定java编译器的符号链接。它说
      java是/usr/bin/java
      ,默认值应该是11?现在
      file/usr/bin/java
      /usr/bin/java:etc/alternations/java
      的符号链接,我猜是java11?哦,您可能有Debian之类的东西。
      java-version
      说了什么?让java指向“/usr/bin/java”不是更好吗?这将避免任何关于系统更新等的混淆。
      /usr/lib/jvm/java-1.11.0-openjdk-amd64
      是一个目录,我认为我应该添加/bin/java有时候如果您有其他工具,您需要/usr/bin/java,并且希望它是特定的版本,但您将它更改为指向版本11或其他什么的,您可能会遇到问题。一般来说,这不是一个大问题,但您可能会面临一些微妙的问题。脚本不支持别名——最好使用Debian Alternations系统来选择要使用的解释器,因为这不仅适用于shell的直接调用,也适用于其他程序的调用(如构建脚本或IDE!)还有。@VivekAkupatni配置文件中的别名是否也在非交互模式下工作,即在脚本中?
      $ alias java8="`/usr/libexec/java_home -v 1.8`/bin/java"
      
      $ alias java11="`/usr/libexec/java_home -v 11`/bin/java"
      
      $ java8 -version
      
      java version "1.8.0_281"
      Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
      Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
      
      $ java11 -version
      
      openjdk version "11.0.2" 2019-01-15
      OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
      OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)