是否同一棵二叉搜索树

一段时间以前,我写了一篇文章《 用示例解释Java Lambda表达式》,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它。 但是在我当前的项目中,我们仍在使用Java 8,现在我想升级自己并学习Java 11,但无法安装它。

这在许多Java开发人员中都会发生,有时您想学习和探索Java的最新版本,例如Java 11,但是由于您和您的团队正在使用某些较旧的版本(例如Java 8)而无法将其安装在计算机上。不想破坏您的项目。

或者假设您正在处理多个项目,其中一些使用Java 8,而一些新项目使用Java11。因此,为了并行处理这些项目,您将需要在计算机上安装多个JDK,并且应该能够切换它们之间。

如果有办法,该怎么办?如果能够安装多个版本的Java,然后根据需要关闭并打开它们,该怎么办?

好吧,有一个名为SDKMan的工具,它可以让我们按照官方网站进行操作:

SDKMan! 是用于管理多个版本的并行版本的工具大多数基于Unix的系统上的软件开发套件 它提供了一个方便的命令行界面(CLI)和API,用于安装,切换,删除和列出候选人。关于SDKMan的一些要点如下:

  1. SDKMan是免费使用的,它是由开源社区开发的。
  2. SDKMan是用bash编写的,它只需要curl和zip / unzip程序就可以出现在您的系统上。
  3. SDKMan可以为JVM安装大约29个软件开发套件,例如Java,Groovy,Scala,Kotlin和Ceylon。 蚂蚁,Gradle,Grails,Maven,SBT,Spark,Spring Boot,Vert.x。
  4. 我们不需要担心设置_HOMEPATH环境变量,因为SDKMan会自动处理它。

安装SDKMan

SDKMan可以在任何基于UNIX的平台上运行,例如Mac OSX,Linux,Cygwin,Solaris和FreeBSD,我们可以使用以下命令进行安装:

只需打开一个新终端并输入:

 $ curl -s " https://get.sdkman.io " | bash | bash$ source "$HOME/.sdkman/bin/sdkman-init.sh"

我们可以使用sdk version验证安装,并且sdk help命令将为我们提供有关sdk命令用法的完整帮助。

因为SDKMan是用bash编写的,所以仅要求curl和zip / unzip出现在系统上。 您也可以先在Windows环境中安装Cygwin或Git Bash ,然后再运行上述命令,然后在Windows上安装SDKMan。

使用SDKMan安装Java

SDKMan支持为JVM安装29个软件开发套件,例如Java,Groovy,Scala,Kotlin和Ceylon,Grails,SBT,Spark,Spring Boot。 我们可以使用sdk list命令获取完整列表。

SDKMan还可以帮助我们安装诸如Ant,Maven和Gradle之类的构建工具。您可以在Java Build Tools比较中有关这些构建工具的信息:Ant vs Maven vs Gradle 。

命令sdk list java将为我们提供一个Java版本列表,我们可以使用SDKMan进行安装,如下所示:

 $ sdk list java================================================================================Available Java Versions================================================================================13 .ea. 02 -open 1.0 . 0 -rc- 10 -grl12 .ea. 26 -open 1.0 . 0 -rc- 9 -grl11.0 . 2 -zulu 1.0 . 0 -rc- 8 -grl11.0 . 2 -open11.0 . 1 -zulufx10.0 . 2 -zulu10.0 . 2 -open9.0 . 7 -zulu9.0 . 4 -open8.0 . 202 -amzn8.0 . 201 -zulu8.0 . 201 -oracle8.0 . 192 -zulufx7.0 . 181 -zulu1.0 . 0 -rc- 11 -grl================================================================================+ - local version* - installed> - currently in use================================================================================

现在,假设我们要安装Java v9的OpenJDK版本,那么我们将在终端中执行以下命令,该命令还将更新PATH和JAVA_HOME变量:


$ sdk install java 9.0 . 4 -open

该命令将花费一些时间,因为它将在我们的计算机上下载JDK,并且该命令将输出如下内容:

 Downloading: java 9.0 . 4 -openIn progress...######################################################################## 100.0 %Repackaging Java 9.0 . 4 -open...Done repackaging...Cleaning up residual files...Installing: java 9.0 . 4 -openDone installing!Setting java 9.0 . default -open as 4 default .

现在,如果我们检查Java版本和JAVA_HOME,我们可以看到Java已更新为9.0.4。

 $ java -versionopenjdk version "9.0.4"OpenJDK Runtime Environment (build 9.0 . 4 + 11 )OpenJDK 64 -Bit Server VM (build 9.0 . 4 + 11 , mixed mode)$ echo $JAVA_HOME/Users/xbbnrde/.sdkman/candidates/java/current

我们可以按照相同的过程安装上面列表中可以看到的任何版本,让我们假设我们要安装Java V11版本,然后可以执行以下命令:

 $ sdk install java 11.0 . 2 -openDownloading: java 11.0 . 2 -openIn progress...######################################################################## 100.0 %Repackaging Java 11.0 . 2 -open...Done repackaging...Cleaning up residual files...Installing: java 11.0 . 2 -openDone installing!Do you want java 11.0 . 2 -open to be set as default ? (Y/n): Y ? (Y/n): YSetting java 11.0 . 2 -open as default .

现在,如果再次检查Java版本和JAVA_HOME,可以看到Java已更新为11.0.2:

 $ java -versionopenjdk version "11.0.2" 2019 - 01 - 15OpenJDK Runtime Environment 18.9 (build 11.0 . 2 + 9 )OpenJDK 64 -Bit Server VM 18.9 (build 11.0 . 2 + 9 , mixed mode)$ echo $JAVA_HOME/Users/xbbnrde/.sdkman/candidates/java/current

注意:有时候,您需要关闭并重新打开终端才能看到更改。

将SDKMan指向您现有的已安装Java版本

首先,我们需要找出Java在您计算机上的安装位置。 在我的机器上,它安装在文件夹jdk1.8.0_172.jdk ,该文件夹位于/Library/Java/JavaVirtualMachines文件夹下,让我们通过<java-folder>

我们要做的第二件事是在已安装的<java-folder>和SDKMan之间建立符号链接,我们可以通过运行以下命令来做到这一点:

 $ ln -s /Library/Java/JavaVirtualMachines/<java-folder> ~/.sdkman/candidates/java/<java-folder>$ sudo ln -s /Library/Java/JavaVirtualMachines/<java-folder>/Contents/Home/bin ~/.sdkman/candidates/java/<java-folder>/bin

现在,如果再次执行sdk list java命令,我们将获得:

 ================================================================================Available Java Versions================================================================================+ jdk1. 8 .0_172.jd 8.0 . 201 -zulu13 .ea. 02 -open 8.0 . 201 -oracle12 .ea. 26 -open 8.0 . 192 -zulufx11.0 . 2 -zulu 7.0 . 181 -zulu> * 11.0 . 2 -open 1.0 . 0 -rc- 12 -grl11.0 . 2 .j9-adpt 1.0 . 0 -rc- 11 -grl11.0 . 2 .hs-adpt 1.0 . 0 -rc- 10 -grl11.0 . 1 -zulufx 1.0 . 0 -rc- 9 -grl10.0 . 2 -zulu 1.0 . 0 -rc- 8 -grl10.0 . 2 -open9.0 . 7 -zulu* 9.0 . 4 -open8.0 . 202 -amzn8.0 . 202 .j9-adpt8.0 . 202 .hs-adpt================================================================================+ - local version* - installed> - currently in use================================================================================

我们可以清楚地看到我们的机器和JDK上已安装了3个JDK11.0.2-open现已使用。 但是,如果我们想在它们之间切换或安装新的,则可以使用sdk use java <version_which_you_want_to_use>轻松实现,方法是sdk use java <version_which_you_want_to_use> ,如下所示:

使用Java 9

 $ sdk use java 9.0 . 4 -openUsing java version 9.0 Using java version . 4 -open in this shell. -open in shell.$ java -versionopenjdk version "9.0.4"OpenJDK Runtime Environment (build 9.0 . 4 + 11 )OpenJDK 64 -Bit Server VM (build 9.0 . 4 + 11 , mixed mode)

使用本地安装的Java 8

 $ sdk use java jdk1. 8 .0_172.jdkUsing java version jdk1. .0_172.jdk in this shell. 8 .0_172.jdk in shell.$ java -versionjava version "1.8.0_172"Java(TM) SE Runtime Environment (build 1.8 .0_172-b11)Java HotSpot(TM) 64 -Bit Server VM (build 25.172 -b11, mixed mode)

使用Java 11

 $ sdk use java 11.0 . 2 -openUsing java version 11.0 Using java version . 2 -open in this shell. -open in shell.$ java -versionopenjdk version "11.0.2" 2019 - 01 - 15OpenJDK Runtime Environment 18.9 (build 11.0 . 2 + 9 )OpenJDK 64 -Bit Server VM 18.9 (build 11.0 . 2 + 9 , mixed mode)

使用sdk use命令只能使您在执行sdk use命令的同一终端外壳中使用指定版本的JDK。 并且,如果您关闭终端并再次打开它,则将使用以前安装的版本。但是,如果要为所有终端和应用程序激活一个版本的JDK,则可以使用命令sdk default java <your_version>

 $ sdk default java 11.0 . 2 -openDefault java version set to 11.0 . 2 -open$ java -versionopenjdk version "11.0.2" 2019 - 01 - 15OpenJDK Runtime Environment 18.9 (build 11.0 . 2 + 9 )OpenJDK 64 -Bit Server VM 18.9 (build 11.0 . 2 + 9 , mixed mode)

或者,您可以卸载该版本并再次安装,如下所示,它将版本设置为当前的JDK。

卸载JDK版本

如果要卸载任何JDK版本,例如11.0.2-open ,则可以执行以下操作:


$ sdk uninstall java 11.0 . 2 -open

并且如果您想重新安装卸载的版本,可以再次安装它,这次SDKMan将不会下载它,因为它已经在您的计算机上安装了(除非您不手动删除它)。

 $ sdk install java 11.0 . 2 -openFound a previously downloaded java 11.0 . 2 -open archive. Not downloading it again... -open archive. Not downloading it again...Installing: java 11.0 . 2 -openDone installing!Do you want java 11.0 . 2 -open to be set as default ? (Y/n): y ? (Y/n): ySetting java 11.0 . 2 -open as default .

使用从IntelliJ IDEA安装的SDMan JDK

SDKMan将所有JDK安装在.sdkman/candidates/java/文件夹下,您可以在主目录中找到.sdkman文件夹。

在IntelliJ中打开任何Java项目后,您可以按Command + :打开项目结构窗口。 在该窗口中,您需要单击在Project SDK部分的New...下,您可以在浏览窗口中输入.sdkman/candidates/java/ ,并且可以从.sdkman/candidates/java/选择任何JDK。

因为.sdkman是隐藏的文件夹,并且如果您在查找它时遇到问题,则可以始终使用以下命令使用非隐藏的文件夹创建指向它的符号链接。

$ ln -s ~/.sdkman ~/sdkman

您可以在此Github存储库中找到我的文章的完整源代码,请随时提供宝贵的反馈。

翻译自: https://www.javacodegeeks.com/2019/04/how-to-install-multiple-versions-of-java-on-the-same-machine.html

是否同一棵二叉搜索树

是否同一棵二叉搜索树_如何在同一台计算机上安装Java的多个版本相关推荐

  1. python多个版本可不可以装在一起_可以在同一台计算机上安装多个Python版本。

    可以在同一台计算机上安装多个Python版本. 答:对 合理膳食的核心问题是 ( ) 答:膳食结构 青天明月来几时?我今停杯一问之.人攀明月不可得,. --李白<把酒问月> 答:月行却与人 ...

  2. pta 是否完全二叉搜索树_二叉树:构造一棵搜索树

    给「代码随想录」一个星标吧! ❝ 构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指 ...

  3. 5-4 是否同一棵二叉搜索树 (25分)

    https://pta.patest.cn/pta/test/15/exam/4/question/712 这道题考察二叉搜索树的实现,并且还需要一定的逻辑与算法,所以题目还是挺好的. 5-4 是否同 ...

  4. 7-4 是否同一棵二叉搜索树 (25 分)

    是否同一棵二叉搜索树 1.题目描述: 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入 ...

  5. c++判断二叉树是否为二叉搜索树_原创 | 好端端的数据结构,为什么叫它SB树呢?...

    点击上方蓝字,关注并星标,和我一起学技术. 大家好,今天给大家介绍一个很厉害的数据结构,它的名字就很厉害,叫SB树,业内大佬往往叫做傻叉树.这个真不是我框你们,而是它的英文缩写就叫SBT. SBT其实 ...

  6. 04-树4 是否同一棵二叉搜索树 (25 分)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  7. LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target. 如果可以找到返回 True,否则返回 False. 示 ...

  8. 是否同一棵二叉搜索树

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  9. 7-1 是否同一棵二叉搜索树 (30分)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

最新文章

  1. 谷歌发布TensorFlow,用于测试人工智能模型的隐私保护
  2. 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」
  3. XML的序列化和反序列化 详细介绍
  4. openresty完全开发指南_FDA拟修订群体药代动力学指南:医药商需要了解些什么?...
  5. Oracle Scheduler - NLS_ENV
  6. 使用nodejs消费SAP Cloud for Customer上的Web service
  7. 这几部高分学科纪录片,助力孩子涨姿势拓视野~
  8. 不用图片而用css3实现一些阴影特效
  9. 搭建大数据运行环境之二
  10. 清空所有textbox
  11. mxnet入门--第4篇
  12. ai 文案_AI是UX文案的未来吗?
  13. codeblock无法新建工程_【工程前沿】专业专注凸显市政“制造” ——八公司太原南站东广场配套路网工程施工纪实...
  14. c51单片机流水灯程序汇编语言,单片机流水灯汇编程序,8路流水灯汇编语言程序的写法...
  15. ABAP BYPASSING BUFFER 及 表缓存,缓冲概念 SAP
  16. 华为云/dev/vdb磁盘挂载
  17. HTML中的span是什么意思
  18. 桌面虚拟化是该选用IDV还是VDI?
  19. 电子学会 2020年6月 青少年软件编程Python编程等级考试一级真题解析(选择题+判断题+编程题)
  20. echart报错echarts/lib/visual/dataColor in ./node_modules/echarts-liquidfill/src/liquidFill.js

热门文章

  1. scrollTo详解
  2. 在 Oracle 中新建 SDE 用户
  3. 计算机软考职称年限,计算机软考证书是职称吗
  4. git error:invalid path
  5. html+css+js实现拍苍蝇案例
  6. SecureCRT VBS脚本/自动按回车键
  7. 国内外电容电感品牌厂商
  8. 数学中希腊字母的读法
  9. linux vtim vmin的作用以及使用有效的前提
  10. 从零开始学习Ada(入门)