背景

生活不只是眼前的苟且, 还有诗和远方.

上个月工作需要启动了一个小项目, 按最初的计划会用JDK8. 但当计划报上去后, 运维部门出于后续升级维护的考虑, 不允许使用已经出来4年多的JDK8了, 建议使用JDK9或10. 连官方都说了, JDK9和10是两个过度版本, 真正的惊喜在JDK11. 对于开发人员来说这就悲喜交加了. 悲的是: JDK9开始java最大的动作就是已经不怎么向下兼容了, 如果使用必将会遇到各种坑. 喜的是: 可以使用JDK新版本, 尝试新特性. 后面几个开发一合计, 反正是踩坑了, 就定了用JDK10, 后续升级到JDK11 预计成本较小.

然后我们就开始踩坑了, 遇到最多的问题就是JDK9引入的模块化, 导致很多JDK的包需要明确声明才能使用.

新技术用起来了, 老项目还的维护啊. 另一个大坑就是JDK10对JDK8的向下兼容真的不怎么好. 所以我们每次切换项目时, 本地的环境变量JAVA_HOME就要跟着变一下.

这种无聊的改来改去的工作做多了, 我就开始找能省点力气的方法, 就找到了这个工具jenv.

jenv是什么

官方给的定义: jEnv is a command line tool to help you forget how to set the JAVA_HOME environment variable.

这个工具可以方便的帮助我们切换JDK版本.

jenv 安装

使用brew安装jenv很方便的, 具体步骤如下:

  1. 安装

    1. $> brew install jenv
  2. 设置

    1. $> echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
    2. $> echo 'eval "$(jenv init -)"' >> ~/.bash_profile
  3. 重启shell, 检验jenv是否安装成功

    1. $> type jenv
    2. jenv is a shell function from /Users/qyf404/.bash_profile

使用jenv安装不同版本的JDK

在mac上安装JDK是需要root权限的, 所以jenv是不能直接安装JDK的, 只能先手动安装好, 之后将JDK添加到jenv中.

  1. $> jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home
  2. $> jenv add /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home

添加完JDK后, 可以通过命令jenv versions查看已经添加的JDK版本

  1. $> jenv versions
  2. * system
  3. 1.8
  4. 1.8.0.73
  5. 10.0
  6. 10.0.1
  7. oracle64-1.8.0.73
  8. oracle64-10.0.1

使用jenv切换不同版本的JDK

  1. 当前工作目录切换JDK版本使用命令jenv local 10.0.1.(切换后会在当前目录增加一个.java-version文件记录使用的JDK版本)

    1. $> jenv local 10.0.1
  2. 检查是否切换成功使用命令jenv version.

    1. $> jenv version
    2. 10.0.1 (set by /Users/qyf404/.java-version)
    3. $> java -version
    4. java version "10.0.1" 2018-04-17
    5. Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
    6. Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)

设置全局JDK版本

使用jenv global 10.0.1可以设置全局的JDK版本

JDK版本设置优先级

JDK版本设置生效的优先级依次是:

当前目录的设置 > 全局的设置

  • 当前目录的设置在文件./.java-version中配置

    1. 10.0.1
  • 全局的设置在文件~/.jenv/version中配置

    1. 10.0.1

启用和停用插件

有很多构建工具运行时是需要JDK的, 但是很多这种工具会在安装时指定固定的JDK, 而这就会导致jenv配置的JDK对于这些构建工具失效了. 要解决这种问题就需要启动对应的插件.注意这是一个全局配置.

  1. 查看jenv支持的插件列表

    1. $> jenv plugins
    2. ant
    3. export
    4. golo
    5. gradle
    6. grails
    7. groovy
    8. lein
    9. maven
    10. sbt
    11. scala
    12. springboot
    13. vlt
  2. 启动插件

    1. $> jenv enable-plugin maven
    2. maven plugin activated
  3. 停用插件

    1. $> jenv disable-plugin maven
    2. maven disabled

参考

日期:2018-06-21 作者:辵鵵

学习jenv的更多相关文章

  1. 23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy

    23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy 2016-07-18 (www.cnblogs.com/icmzn) 模式理解

  2. OpenCv 人脸检測的学习

    近期公司要组织开发分享,可是自己还是新手真的不知道分享啥了,然后看了看前段时间研究过OpenCv,那么就分享他把. openCv就不介绍了,说下人脸检測.事实上是通过openCv里边已经训练好的xml ...

  3. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  4. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  5. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  6. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  9. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

随机推荐

  1. ES6的Module系统

    http://es6.ruanyifeng.com/#docs/module Module 的语法 概述 严格模式 export 命令 import 命令 模块的整体加载 export default ...

  2. 20155202 2016-2017-2 《Java程序设计》第9周学习总结

    20155202 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 整合数据库: JDBC驱动程序,按照方式分4种类型: Type1 : JDBC-ODBC B ...

  3. 20155327 2017-2018-2 《Java程序设计》第一周学习总结

    20155327 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 三大平台: 1.Java SE:JVM,JRE,JDK,java语言 JVM:Java虚拟机 ...

  4. win10操作系统vs2010编译osg3.4.0问题解决记录

    参考博客:OSG3.4.0+VS2010+WIN10编译及二次开发环境搭建 链接:https://blog.csdn.net/hsc1239653453/article/details/7827856 ...

  5. 双系统IOS\windows7 换成Windows10后果

    昨天将双系统IOS 和Windows7 换成了Windows10后 发现原来在IOS盘"E"盘下面的文件都不显示了,而且盘符都打不开,那叫一个着急啊,开发项目的代码全在那个盘符里面 ...

  6. 2 timeit模块,python中数据结构

    1.timeit模块:代码事件测量模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass', ti ...

  7. TMS320VC5509驱动TLV32AIC23

    1. 本次使用LINE_IN作为输入,LINE_OUT作为输出(可以插耳机),代码如下,代码经过测试,没问题,不过发现了一个很奇怪的问题没搞明白 /************************** ...

  8. Design2:使用HierarchyID构建数据的分层结构

    1,传统的分层结构是父子结构,表结构中有一个ParentID字段自引用表的主键,表示“归属”关系,例如 create table dbo.emph ( ID int not null primary ...

  9. window.location.hash 页面跳转,精确定位,实例展示:

    window.location.hash 页面跳转,精确定位,实例展示: (1).index.phtml,页面用于传参 <script id="bb_list_template&quo ...

  10. [学习笔记]SiftGPU入门

    当有读者看到我这篇SiftGPU入门的学习笔记时,相信你已经读过了高博那篇<SLAM拾萃:SiftGPU>,那篇文章写于16年,已经过去两年的时间.在我尝试配置SiftGPU的环境时,遇到 ...