代码改变世界

使用jEnv在Mac/Linux环境配置多版本Java

2017-07-05 00:16  yx1989  阅读(4553)  评论(0编辑  收藏

jEnv 是什么?

先来看一下官方介绍

jEnv is a command line tool to help you forget how to set the JAVA_HOME environment variable.

jEnv 是一个可以帮你你忘掉怎么去配置JAVA_HOME环境变量的命令行工具。

简单来说就是一个便于切换Java版本的工具,有了他我们再也不用手动去改环境变量了。

安装

Mac OS X via Homebrew

brew install jenv

Linux / OS X

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

配置

Bash

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile

Zsh

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

如果没有在配置好如上的jEnv环境变量的话,在下边的添加JAVA_HOME时会遇到如下错误:

ln: /Users/demo/.jenv/versions/oracle64-1.7.0.45: No such file or directory

如果已经添加但是仍没有生效的话,可以试一下重新加载bash_profile

source ~/.bash_profile

安装Java

可以去Oracle的官网下载JDK的安装包进行安装。也可以通过Homebrew-Cask来安装。

Homebrew-Cask 是一个基于Homebrew来优雅、简单和快速的安装macOS应用和大型二进制文件的工具。

使用如下命令安装Homebrew-Cask

brew tap caskroom/cask

通过Homebrew-Cask我们可以这样安装Chrome

brew cask install google-chrome

我们也可以一行命令来安装Java

brew cask install java

之前有stackoverflow上的问题mac-os-x-and-multiple-java-versions讲到可以通过Home-Cask安装多个Java版本:

brew cask install java7

brew cask install java6

但其实这种方法已经不可用了,会遇到

Error: Cask 'java7' is unavailable: No Cask with this name exists.

因为 Homebrew-Cask已经移除了Java 7,所以想安装Java 7的话,还是需要去Oracle官网下载。

配置Java

Java安装好之后,使用如下命令:

jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

即可成功添加Java配置到 jEnv(如果遇到错误,请检查下前边的环境变量配置)。

Mac的Java默认会安装到 /Library/Java/JavaVirtualMachines/ 路径下。

同样,我们添加好jdk1.8

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/
oracle64-1.8.0.131 added
1.8.0.131 added
1.8 added

使用

列出管理的JDK

$ jenv versions
* system (set by /Users/demo/.jenv/version)
  1.7
  1.7.0.45
  1.8
  1.8.0.131
  oracle64-1.7.0.45
  oracle64-1.8.0.131

看起来有点多,但其实就是1.7、1.8两个版本的别名。

配置全局Java版本

$ jenv global 1.7

配置当前目录的Java版本

$ jenv local 1.7

这种方式会只改变当前所在目录的Java版本,可以通过如下命令取消

$ jenv local --unset

配置shell实例的版本

jenv shell 1.8

这种配置方式,只会影响当前shell窗口。

配置JVM Options

$ jenv global-options "-Xmx512m"

or

$ jenv local-options "-Xmx512m"

or

$ jenv shell-options "-Xmx512m"