使用jEnv管理多个JDK安装 - reflectoring

解道jdon 2020-11-06 01:20:02
使用 jenv 管理 多个 jdk


jEnv是一个方便的工具,可以在不同项目之间管理多个JDK版本。

作为开发人员,我们经常同时在不同的代码库上工作。尤其是在具有微服务的环境中,我们可能一天要多次切换代码库。

在每两年发布一次新Java版本的日子里,这通常不是问题,因为大多数代码库都需要相同的Java版本。

当Java发行节奏每6个月更改一次时,这种情况就会改变。今天,如果我们正在使用多个代码库,则每个代码库都有可能使用不同的Java版本。

jEnv是一个工具,可以帮助我们管理多个JDK安装并配置每个代码库以使用特定的JDK版本,而无需更改JAVA_HOME环境变量。

 

安装jEnv

jEnv支持Linux和MacOS操作系统。如果您使用的是Windows,则需要安装LinuxWindows子系统(或bash模拟器,如GitBash)才能使用它。

按照jEnv主页上的安装说明安装jEnv。

 

安装JDK

如果您正在阅读本文,则很可能要为正在使用的代码库设置新的JDK。让我们从AdoptOpenJDK网站下载JDK 。

选择所需的版本并下载。将.tar.gz文件解压缩到任意位置。

关于jEnv的好处是,我们不需要通过brew,yum或apt之类的软件包管理器来安装JDK。我们只需要下载一个JDK并将其放入某个文件夹中即可。

您仍然可以使用brew,yum或apt来安装JDK,您只需要查找包管理器之后放置JDK的文件夹即可。

 

将JDK添加到jEnv

要将新的JDK与jEnv一起使用,我们需要告诉jEnv在哪里找到它。首先,使用jenv versions命令检查jEnv已经支持哪些JDK 。

就我而言,我已经安装了JDK 11、13和14。每个版本都有三种不同的名称。

假设我们已经下载了JDK 15并将其提取到该文件夹​​中~/software/java/jdk-15+36。

现在,我们将新的JDK添加到jEnv中:

jenv add /home/tom/software/java/jdk-15+36/

如果再次运行jenv versions,将发现:在JDK 15已名下加15和openjdk64-15。

 

本地与全局JDK

jEnv支持全局JDK和多个本地JDK的概念。

全局JDK是在java计算机上任何地方键入命令行时都将使用的JDK 。

本地JDK是仅为特定文件夹配置的JDK。如果我们java在此文件夹中输入命令行,它将不使用全局JDK,而是使用本地JDK。

我们可以使用它为不同的项目配置不同的JDK(只要它们位于不同的文件夹中)。

  • 设置全局JDK

首先,我们检查全局JDK的版本:

jenv global

在我的情况下,输出为:

system

这意味着系统安装的JDK将用作全局JDK。该名称system不是很有帮助,因为它没有说明它是哪个版本。让我们将全局JDK更改为具有版本号的更有意义的JDK:

jenv global 11

此命令已将全局使用的JDK版本更改为11。就我而言,该版本与以前相同,但是如果键入jenv global,我现在将看到哪个JDK版本是我的全局版本。

  • 设置本地JDK

还记得我们下载的JDK 15吗?下载它的原因可能是我们正在开发一个需要运行JDK 15的新项目。

假设该项目位于文件夹中~/shiny-project。让我们cd进入这个文件夹。

如果现在输入java -version,将得到以下结果:

openjdk version "11.0.8" 2020-07-14

这是因为JDK 11是我的全局JDK。

让我们将此项目更改为JDK 15:

jenv local 15

现在再次键入java -version,输出将是:

openjdk version "15" 2020-09-15

这是如何运作的?

使用该jenv local命令后,您将.java-version在当前文件夹中找到一个名为的文件。该文件包含本地JDK的版本号。

在安装过程中,jEnv会覆盖该java命令。每次我们java现在调用时,jEnv都会查找一个.java-version文件,如果找到一个文件,则将启动该文件中定义的JDK版本。如果找不到.java-version文件,则会启动全局配置的JDK。

 

使用Maven和Gradle

因此,如果我们java通过命令行调用,它将立即选择一个本地配置的JDK。大!

但是,诸如Maven或Gradle之类的工具仍然使用JDK的系统版本!

让我们来看看我们能做些什么。

  • 配置jEnv以与Maven一起使用

使Maven与jEnv定义的本地JDK一起使用很容易。我们只需要安装maven插件:

jenv enable-plugin maven

如果现在在~/shiny-project文件夹中运行mvn -version,将获得以下输出:

Maven home: .../apache-maven-3.6.3
Java version: 15, vendor: AdoptOpenJDK, runtime: /home/tom/software/java/jdk-15+36
Default locale: en_AU, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-52-generic", arch: "amd64", family: "unix"

  • 配置jEnv以使用Gradle

就我而言,Gradle自动选择了jEnv本地配置的JDK!

如果您无法立即使用它,则可以类似于上述Maven插件那样安装gradle插件:

jenv enable-plugin gradle

如果现在在~/shiny-project文件夹中运行gradle -version,将获得安装结果。

 

                   

版权声明
本文为[解道jdon]所创,转载请带上原文链接,感谢
https://www.jdon.com/55248

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云