学习jenv

背景
生活不只是眼前的苟且, 还有诗和远方.
上个月工作需要启动了一个小项目, 按最初的计划会用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很方便的, 具体步骤如下:
安装
$> brew install jenv
设置
$> echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$> echo 'eval "$(jenv init -)"' >> ~/.bash_profile
重启shell, 检验jenv是否安装成功
$> type jenv
jenv is a shell function from /Users/qyf404/.bash_profile
使用jenv安装不同版本的JDK
在mac上安装JDK是需要root权限的, 所以jenv是不能直接安装JDK的, 只能先手动安装好, 之后将JDK添加到jenv中.
$> jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home
$> jenv add /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
添加完JDK后, 可以通过命令jenv versions查看已经添加的JDK版本
$> jenv versions
* system
1.8
1.8.0.73
10.0
10.0.1
oracle64-1.8.0.73
oracle64-10.0.1
使用jenv切换不同版本的JDK
当前工作目录切换JDK版本使用命令
jenv local 10.0.1.(切换后会在当前目录增加一个.java-version文件记录使用的JDK版本)$> jenv local 10.0.1
检查是否切换成功使用命令
jenv version.$> jenv version
10.0.1 (set by /Users/qyf404/.java-version) $> java -version
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
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中配置10.0.1
全局的设置在文件
~/.jenv/version中配置10.0.1
启用和停用插件
有很多构建工具运行时是需要JDK的, 但是很多这种工具会在安装时指定固定的JDK, 而这就会导致jenv配置的JDK对于这些构建工具失效了. 要解决这种问题就需要启动对应的插件.注意这是一个全局配置.
查看jenv支持的插件列表
$> jenv plugins
ant
export
golo
gradle
grails
groovy
lein
maven
sbt
scala
springboot
vlt
启动插件
$> jenv enable-plugin maven
maven plugin activated
停用插件
$> jenv disable-plugin maven
maven disabled
参考
日期:2018-06-21 作者:辵鵵
学习jenv的更多相关文章
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy
23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy 2016-07-18 (www.cnblogs.com/icmzn) 模式理解
- OpenCv 人脸检測的学习
近期公司要组织开发分享,可是自己还是新手真的不知道分享啥了,然后看了看前段时间研究过OpenCv,那么就分享他把. openCv就不介绍了,说下人脸检測.事实上是通过openCv里边已经训练好的xml ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
随机推荐
- 2017-2018-2 20155315《网络对抗技术》Exp5 :MSF基础应用
实验目的 学会用metasploit进行简单的攻击操作 教程 实验内容 metasploit中有六个模块分别是 渗透攻击模块(Exploit Modules) 辅助模块(Auxiliary Modul ...
- PosgreSQL 9.0 High Performance中文版瑕疵
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页 回到顶级页面:PostgreSQL索引页 发表此文不是为了吐槽,而是为了防止更多的受害者出现啊,拿到书后 ...
- 9.22 下午 (document对象)
document对象 1.找元素:(1)gerElementById()根据ID找 (2)gerElementByClassName()根据Class找,返回数组 (3)gerElem ...
- 18-[模块]-random&os&sys
1.random模块 程序中有很多地方需要用到随机字符,比如登录网站的随机验证码,通过random模块可以很容易生成随机字符串 # randrange #返回1-3之间的一个随机数,不包含3 # ra ...
- Openstack入门篇(十四)之horizon服务的部署与测试
1.Horizon介绍 •提供一个web界面操作openstack的系统 •使用Django框架基于openstack API开发 •支持将session存储在DB.memcached •支持集群 t ...
- UWP DEP0700: 应用程序注册失败。[0x80073CF9] 另一个用户已安装此应用的未打包版本。当前用户无法将该版本替换为打包版本。
最近电脑抽风,我在[应用程序和功能]中重置了以下我的App自然灾害,居然,搞出大新闻了. 它居然从列表中消失了... vs再次编译代码的时候,提示 严重性 代码 说明 项目 文件 行 禁止显示状态 错 ...
- 用docsify快速构建文档,并用GitHub Pages展示
什么是docsify 无需构建,写完 markdown 直接发布成文档,写说明文档的极佳选择. 快速上手 安装 npm i docsify-cli -g docsify init docs 创建项目 ...
- 定时任务的使用-crond
第1章 练习题 1.1 每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包) 1.1.1 测试命令 [root@znix ~]# ...
- (转)为什么所有浏览器的user-agent都是Mozilla
最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来. 然后出现了一个新的网页 ...
- Linux之linux基础命令
一.命令分:内部命令.外部命令① 内部命令:是由 Shell解释器解释的② 外部命令:除了Shell解释器以外的命令③ 识别命令类型:type 命令字 二.命令一般组成格式: 命令字 [选项].. [ ...