专栏首页码匠的流水账命令行一键切换java版本的几种方式

命令行一键切换java版本的几种方式

本文主要讲述一下命令行一键切换java版本的几种方式

背景

java现在版本发布相对以前比较频繁了,java9还没来得及用,java10就出来了,2018年9月份java11也要来了,于是就有需求在笔记本电脑上装多个版本的java,一键切换就变得极为迫切。

zsh function实现

~/.zshrc

function jvm {
    version=$1
    case "$version" in
    9)
        export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home'
        ;;
    10)
        export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home'
        ;;
    *)
        export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home'
        ;;
    esac     
}

值得注意的是这个命令只对当前命令窗口有效。新开的窗口还是使用~/.zshrc里头原来配置的JAVA_HOME版本。

使用实例

jvm 8
java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

jvm 9
java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

jvm10
java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

jenv

jenv有点类似node的nvm之类的用来管理多版本

安装

brew install jenv
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
mkdir -p  ~/.jenv/versions

注册java版本

jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home

查看版本

jenv versions
* system (set by /Users/demo/.jenv/version)
  1.8
  1.8.0.151
  10
  9
  openjdk64-10
  oracle64-1.8.0.151
  oracle64-9

切换

➜  ~ jenv local 1.8
➜  ~ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

➜  ~ jenv local 9
➜  ~ java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

➜  ~ jenv local 10
➜  ~ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

这个local作用当前窗口以及之后新开的窗口 相对于local,有个global,可以用来设置默认的版本,不过我这边貌似不起作用,先忽略这个

maven

jenv enable-plugin maven

jenv的这个命令可以强制maven使用jenv配置的java版本

小结

切换java版本的本质还是修改JAVA_HOME环境变量,需要注意切换后该环境变量的作用域,jenv可以作用到之后新打开的窗口。

doc

  • jenv
  • java-environment-management
  • jenv add “ln No such file or directory” #167
  • Unix / Linux Shell - The case…esac Statement

本文分享自微信公众号 - 码匠的流水账(geek_luandun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java10系列(一)Time-Based Release Versioning

    本文主要解读下java10的Time-Based Release Versioning

    codecraft
  • SpringBoot配置文件日期属性转换实例

    本文展示一下如何在springboot中配置文件指定日期,在java里头用LocalDateTime接收。

    codecraft
  • java9系列(一)安装及jshell使用

    官网地址http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-38485...

    codecraft
  • 短小精悍之 Redis 命令行工具有趣的罕见用法

    我们天天都在使用 Redis 内置的命令行工具 redis-cli,久而久之以为它就是一个简单的交互式 Redis 数据结构手工操作程序,但是它背后强大的功能绝...

    老钱
  • 机器学习原来这么有趣!【第二章】:用机器学习制作超级马里奥的关卡

    在第一章中我们谈到,机器学习是用泛型算法告诉你一些有关数据的有趣结论,而这个过程中你不需要写任何与问题有关的特定代码。(如果你还没有读过第一章,现在先去读吧!机...

    lujohn3li
  • I LOVE IT——做优秀的IT人

    I LOVE IT——做优秀的IT人 ? 如今的经济状况太槽糕了,很多人都在找工作。与此同时,许多科技公司非常渴望招到优秀IT人,这活儿报酬极高还有很多福利。我...

    企鹅号小编
  • STL算法(for_each/transform)

    用于逐个遍历容器元素,它对迭代器区间[first,last)所指的每一个元素,执行由单参数函数对象f所定义的操作。方法返回函数对象。

    用户2929716
  • Java基本语法

    landv
  • 【编程基础】Java初学者需要了解的10个语法细节

    语法语法,语法就是语言的法则。汉语有汉语的语法,英语有英语的语法,如果不懂语法那你写出来的句子要不然就是错误,要不然就是生涩难懂。要学习和使用Java语言就要遵...

    程序员互动联盟
  • INET_ATON()函数在MySQL5.6版本和5.7版本的差异

    问题 ### The error occurred while setting parameters ### SQL: insert into t_gatewa...

    囚兔

扫码关注云+社区

领取腾讯云代金券