组装一台计算机 java_如何在同一台计算机上安装多个Java版本

组装一台计算机 java

一段时间以前,我写了一篇文章《 用示例解释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将为我们提供可以使用SDKMan安装的Java版本列表,如下所示:

 $ sdk list java  ================================================================================  Available Java Versions  ================================================================================ 13 .ea. 02 -open 1.0 . 0 -rc- 10 -grl 12 .ea. 26 -open 1.0 . 0 -rc- 9 -grl 11.0 . 2 -zulu 1.0 . 0 -rc- 8 -grl 11.0 . 2 -open 11.0 . 1 -zulufx 10.0 . 2 -zulu 10.0 . 2 -open 9.0 . 7 -zulu 9.0 . 4 -open 8.0 . 202 -amzn 8.0 . 201 -zulu 8.0 . 201 -oracle 8.0 . 192 -zulufx 7.0 . 181 -zulu 1.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 -open  In progress...  ######################################################################## 100.0 %  Repackaging Java 9.0 . 4 -open...  Done repackaging...  Cleaning up residual files...  Installing: java 9.0 . 4 -open  Done installing!  Setting java 9.0 . default -open as 4 default . 

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

 $ java -version  openjdk 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 -open  Downloading: java 11.0 . 2 -open  In progress...  ######################################################################## 100.0 %  Repackaging Java 11.0 . 2 -open...  Done repackaging...  Cleaning up residual files...  Installing: java 11.0 . 2 -open  Done installing!  Do you want java 11.0 . 2 -open to be set as default ? (Y/n): Y ? (Y/n): Y  Setting java 11.0 . 2 -open as default . 

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

 $ java -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)  $ 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 -zulu 13 .ea. 02 -open 8.0 . 201 -oracle 12 .ea. 26 -open 8.0 . 192 -zulufx 11.0 . 2 -zulu 7.0 . 181 -zulu > * 11.0 . 2 -open 1.0 . 0 -rc- 12 -grl 11.0 . 2 .j9-adpt 1.0 . 0 -rc- 11 -grl 11.0 . 2 .hs-adpt 1.0 . 0 -rc- 10 -grl 11.0 . 1 -zulufx 1.0 . 0 -rc- 9 -grl 10.0 . 2 -zulu 1.0 . 0 -rc- 8 -grl 10.0 . 2 -open 9.0 . 7 -zulu * 9.0 . 4 -open 8.0 . 202 -amzn 8.0 . 202 .j9-adpt 8.0 . 202 .hs-adpt  ================================================================================  + - local version  * - installed  > - currently in use  ================================================================================ 

我们可以清楚地看到我们的机器和JDK上已经安装了3个JDK
到目前为止,正在使用11.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 -open  Using java version 9.0 Using java version . 4 -open in this shell. -open in shell.  $ java -version  openjdk 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.jdk  Using java version jdk1. 8 .0_172.jdk in this shell.  $ java -version  java 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 -open  Using java version 11.0 Using java version . 2 -open in this shell. -open in shell.  $ java -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) 


使用sdk use命令只能使您在执行sdk use命令的同一终端外壳中使用指定版本的JDK。 并且,如果您关闭终端并再次打开它,则将使用以前安装的版本。

但是,如果要为所有终端和应用程序激活一个JDK版本,则可以使用命令sdk default java <your_version>

 $ sdk default java 11.0 . 2 -open  Default java version set to 11.0 . 2 -open  $ java -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) 

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

卸载JDK版本

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

 $ sdk uninstall java 11.0 . 2 -open 

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

 $ sdk install java 11.0 . 2 -open  Found a previously downloaded java 11.0 . 2 -open archive. Not downloading it again... -open archive. Not downloading it again...  Installing: java 11.0 . 2 -open  Done installing!  Do you want java 11.0 . 2 -open to be set as default ? (Y/n): y ? (Y/n): y  Setting 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串类型的日期如何存储到数据表Date类型的字段中

在使用 JDBC 访问数据库存储数据时&#xff0c;日期类型的数据必须是 java.sql.Date 的才能注入到 SQL 语句中。 因此这里是将字符串类型的日期转换成 java.util.Date&#xff0c;接着再转换成 java.sql.Date &#xff0c;最后注入到 SQL 语句中。 public class ProjectDAO { …

python执行linux命令返回结果_python执行linux命令的简单示例

对python执行linux命令的两种方法感兴趣的小伙伴&#xff0c;下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧&#xff01;python执行linux命令有两种方法&#xff1a;在此以Linux常用的ls命令为例&#xff1a;方法一&#xff1a;使用os模块shell# python>> import os…

web api开启错误提示_当HTTP状态代码不足时:处理Web API错误报告

web api开启错误提示RESTful Web API设计的一个领域&#xff08;经常被忽视&#xff09;是如何报告与业务或应用程序有关的错误和问题。 首先要想到HTTP状态代码的正确用法&#xff0c;尽管非常方便&#xff0c;但通常它的信息量还不够。 让我们以400错误请求为例。 是的&#…

会议室分配时间最长_论文导论动态任务分配GPU上图计算的高效处理方式

编者按GPU作为一种硬件&#xff0c;相比较于CPU来说&#xff0c;有更多的并行度和更高的带宽&#xff0c;在图像处理领域取得了非常好的应用效果。越来越多的研究也正试图将GPU也应用到图计算领域中&#xff0c;然而GPU适合进行规则运算&#xff0c;但是图是一种不规则的数据表…

JS(Javascript)校验表单项的内容是否合规

<script !src"">/*** 分析&#xff1a;* 1.给表单绑定onsubmit事件* 监听器中判断每个方法检验的结果&#xff0c;如果都是true&#xff0c;则监听器方法返回true&#xff1b;如果有一个为false,* 则监听器方法返回false* 2.定义一些方法分别校验各个表单项* 3…

java \t怎么从头开始_如何从头开始以正确的面向对象方式创建Java Web Framework

java \t怎么从头开始您如何用Java设计Web应用程序&#xff1f; 您安装了Spring&#xff0c;阅读了手册&#xff0c;创建了控制器 &#xff0c;创建了一些视图&#xff0c;添加了一些注释 &#xff0c;它就可以工作了。 如果没有Spring &#xff08;Ruby中没有Ruby on Rails&…

kl散度的理解_以曲率的视角理解自然梯度优化

一个故事我要讲一个故事:一个你几乎肯定听过的故事&#xff0c;但它的侧重点与你习以为常关注的不同。所有现代深度学习模型都使用梯度下降进行训练。 在梯度下降的每个步骤中&#xff0c;您的参数值从某个起始点开始&#xff0c;然后将它们移动到最大损失减少的方向。 你可以通…

JSP的学习笔记

文章目录概念原理JSP 脚本JSP 内置对象概念 Java Server Pages &#xff1a;Java 服务器端页面 可以理解为&#xff1a;一个特殊的页面&#xff0c;其中既可以指定定义 html 标签&#xff0c;又可以定义 Java 代码 用于简化 Servlet 中的输出页面数据的代码的书写!!! 原理 J…

程序员面试算法_程序员的前20个搜索和排序算法面试问题

程序员面试算法大家好&#xff0c;如果您正在准备编程工作面试或正在寻找新工作&#xff0c;那么您知道这不是一个容易的过程。 在您职业的任何阶段&#xff0c;您都必须幸运地接到电话并进行第一轮面试&#xff0c;但是在初学者方面&#xff0c;当您寻找第一份工作时就更加困难…

御用导航提示页面_UI网站导航设计知识与五个知识案例

导航设计是网站的基石。它确定了至关重要的指标&#xff0c;例如转化率和跳出率&#xff0c;页面停留时间&#xff0c;点击量&#xff0c;并且通常是决定您的访问者拥有良好体验并以比您所说的“用户流量”更快退出网站的决定性因素。但是&#xff0c;好的设计是什么样的呢?一…

Servlet规范中定义的过滤器

文章目录什么是过滤器写过滤器的步骤配置初始化参数过滤器的优先级过滤器的优点过滤器执行过程图解过滤敏感词的示例代码使用 Servlet 来过滤敏感词使用过滤器来过滤敏感词通过配置初始化参数来设置敏感词关于 web.xml 的配置什么是过滤器 Servlet 规范当中定义的一种特殊的类…

Spring Boot错误–创建在类路径资源DataSourceAutoConfiguration中定义的名称为“ dataSource”的bean时出错...

大家好&#xff0c;如果您使用的是Spring Boot&#xff0c;并且遇到诸如“无法为数据库类型NONE确定嵌入式数据库驱动程序类”或“在类路径资源ataSourceAutoConfiguration中定义的名称为dataSource的bean创建错误”之类的错误&#xff0c;那么您来对地方了地点。 在本文中&…

simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

前段时间有读者朋友问代码生成的例子&#xff0c;说他正在做EPB的仿真模型&#xff0c;但总是和应用串不到一块去&#xff0c;我这里就从一个简单EPB控制模型来谈谈simulink代码生成&#xff0c;总结代码生成方法的同时也顺便回答他的问题。1.EPB模型准备用来举例说明的模型很简…

通过Socket实现文件上传/上传文件

文章目录整个功能的实现步骤客户端的实现步骤服务端的实现步骤示例代码整个功能的实现步骤 1.客户端使用本地的字节输入流读取被上传的文件数据 2.客户端使用网络字节输出流&#xff0c;将读取到的文件数据发送给服务端 3.服务端使用网络字节输入流读取客户端发送过来的文件数…

构造函数调用默认构造函数_显式无参数构造函数与默认构造函数

构造函数调用默认构造函数大多数不熟悉Java的开发人员都会Swift了解到&#xff0c;如果他们没有指定至少一个显式构造函数&#xff0c;则会为Java类隐式创建一个“ 默认构造函数 ”&#xff08; 由javac进行创建&#xff09;。 Java语言规范的 8.8.9节简要指出&#xff1a;“如…

Artifact到底是什么

将项目构建成一个可以在服务器部署的文件包&#xff08;如&#xff1a;war 包或者 exploded 的文件包&#xff09;&#xff0c;或者构建成的 jar 包&#xff08;这些 jar 包通常是某些模块程序文件&#xff0c;也可以是某些插件程序文件&#xff09;&#xff0c;这些都叫 Artif…

python win10 桌面_Python3如何实现Win10桌面自动切换

得空写了个自动切换桌面背景图片的小程序。再不写python就要扔键盘了&#xff0c;对vue还有那么一点好感&#xff0c;天天php真是有够烦。准备工作准备个文件夹放在桌面上&#xff0c;平时看到什么高清好图就拽进去。运行脚本脚本如下&#xff1a;#!/usr/bin/pythonimport ctyp…

java中抽象类继承抽象类_用Java中的抽象类扩展抽象类

java中抽象类继承抽象类示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不太复杂的设计问题。 我想强调一下&#xff0c;这个问题和设计对于某些人来说似乎很明显&#xff0c;但是在我最近与一位初级开发人员&#…

pb90代码如何连接sql2008r2_如何使用 HTTP Headers 来保护你的 Web 应用

众所周知&#xff0c;无论是简单的小网页还是复杂的单页应用&#xff0c;Web 应用都是网络攻击的目标。2016 年&#xff0c;这种最主要的攻击模式 —— 攻击 web 应用&#xff0c;造成了大约 40% 的数据泄露。事实上&#xff0c;现在来说&#xff0c;了解网络安全并不是锦上添花…

Servlet配置初始化参数/配置参数

文章目录给某个Servlet配置初始化参数配置全局的参数ServletConfig给某个Servlet配置初始化参数 也可以通过注解的方式来配置初始化参数&#xff1a; 在 Servlet 中获取针对 Servlet 的参数值&#xff1a; String version getInitParameter("version");配置全局的…