多版本环境控制

Entropy Lv4

在搭建开发环境时,通常是选择一个LTS(Long Term Support)版本,但是有时候需要在新发布的版本或者是在某个历史版本上搭建环境进行测试,需要重新搭建新环境,带来诸多不便。

关于多版本环境的搭建,笔者这里提供了多版本管理工具的方案,实现多个不同版本之间快速切换和管理,省去环境变量的重复配置。

以下是一些常用的开发环境多版本管理工具,大部分工具支持多平台,这里笔者使用的是Archlinux,其他操作系统也可在官网寻找对应平台的安装教程。

Java 开发环境

JDK 多版本管理工具有很多种,这里主要介绍SDKMANJEnvJabba三种工具。

1.SDKMAN

1.1 安装

SDKMAN 官网安装教程 SDKMAN支持类UNIX的平台,windows系统可以使用WSL

下载安装命令,如果使用zsh或者fish,则将下面的bash替换为你所使用的shell

1
curl -s "https://get.sdkman.io" | bash

这里安装可能会出现缺少zip的问题,参考这篇文章 解决。

Archlinux下直接用包管理器安装

1
sudo pacman -S zip

windows操作系统下,访问sourceforge 找到zip包文件列表,下载zip-3.0-bin.zip ,并将下载的包解压到C:\Program Files\Git\usr\bin目录下,再次执行下载安装命令。

通过上面的命令安装后,接着执行下面的命令手动使配置生效或者开启一个新的终端

1
source "$HOME/.sdkman/bin/sdkman-init.sh"

测试SDKMAN是否安装成功

1
sdk version

输出版本信息即表示安装成功。

1.2 使用

查看可用的JDK版本列表

1
sdk list java

使用SDKMAN安装JDK

1
sdk install java 17.0.6-tem

临时使用指定版本的JDK,在当前shell生效

1
sdk use java 17.0.6-tem

指定全局JDK版本,在全局生效

1
sdk default java 17.0.6-tem

卸载JDK

1
sdk uninstall java 17.0.6-tem

1.3 卸载

SDKMAN没有自动化卸载的方法,需要手动进行卸载

备份源文件目录

1
tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman

删除源文件目录

1
rm -rf ~/.sdkman

删除.bashrc.bash_profile.zshrcprofile文件中安装SDKMAN时写入的初始化配置信息,如果这些文件存在的话,具体要删除的代码片段如下

1
2
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
[[ -s "/home/dudette/.sdkman/bin/sdkman-init.sh" ]] && source "/home/dudette/.sdkman/bin/sdkman-init.sh"

1.4 补充说明

2.jEnv

JEnvSDKMAN不同,JEnv不能直接安装JDK,而是对不同版本JDK环境变量的配置进行管理。

2.1 安装

jEnv 官网 ,支持大部分类Unix系统平台。

git克隆下载

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

Bash中配置

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

Zsh中配置

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

2.2 使用

首先需要去官网下载好对应的JDK源文件tar.gz,并解压到一个合适的目录下。

将已经下载好的JDK添加到jEnv中,以下是参考命令,具体的目录根据实际情况配置。

1
2
jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk17011.jdk/Contents/Home

使用指定版本的JDK

查看管理的JDK版本,当前使用的JDK版本会在前面有一个*的标记

1
jenv versions

配置全局使用的JDK版本,版本根据实际情况选择,命令仅供参考

1
jenv global oracle64-1.6.0.39

配置本地使用的JDK版本(每个目录)

1
jenv local oracle64-1.6.0.39

配置shell使用的JDK版本

1
jenv shell oracle64-1.6.0.39

取消配置,默认会采用system的配置

1
2
3
jenv global --unset
jenv local --unset
jenv shell --unset

2.3 卸载

参考SDKMAN的卸载方法

删除源文件目录

1
rm -rf ~/.jenv

删除.bashrc.bash_profile.zshrcprofile文件中安装SDKMAN时写入的初始化配置信息,如果这些文件存在的话,具体要删除的代码片段如下

1
2
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

3.Jabba

jabba是跨平台的Java版本管理工具,它是受Node.jsnvm启发,并且采用Go语言开发

jabba的官方仓库:https://github.com/shyiko/jabba

3.1 安装

jabba的安装参考文档:Java JDK 版本管理工具jabba的安装

安装最新版本

1
2
export JABBA_GET="curl -sLk"
curl -sLk https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

特别地,如果在fish下安装,使用以下命令

1
curl -sLk https://github.com/shyiko/jabba/raw/master/install.sh | bash; and . ~/.jabba/jabba.fish

测试安装是否成功

1
jabba --version

3.2 使用

安装指定版本的JDK

1
jabba install [email protected]

查看所有安装的JDK版本

1
jabba ls

卸载指定版本的JDK

1
jabba uninstall [email protected]

查看可用的JDK版本

1
jabba ls-remote

切换JDK版本

更多命令参考jabba的常用命令

3.3 卸载

删除源文件目录

1
rm -rf .jabba

删除.bashrc.bash_profile.zshrcprofile文件中安装SDKMAN时写入的初始化配置信息,如果这些文件存在的话,具体要删除的代码片段如下

1
[ -s "/home/entropy/.jabba/jabba.sh" ] && source "/home/entropy/.jabba/jabba.sh"

3.4 补充说明

jabba同样存在国内无法下载或者下载很慢的问题。

4.Archlinux-java

Archlinux提供的java多版本管理方案,是Archlinux自带的一个脚本文件,具体可参考Arch Wiki

Go 开发环境

GVM

GVM 官方仓库 GVMGo语言版本管理器,支持安装和管理多个Go版本

安装

如果使用zsh或者fish,则将下面的bash替换为你所使用的shell

1
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

执行下面的命令手动使配置生效或者打开一个新的终端

1
source $HOME/.gvm/scripts/gvm

使用

先安装Go1.4的版本,之后再安装Go1.5及之后的版本,避免出现引导问题(由于Go1.5版本实现了自举,因此安装高版本的Go还需要准备一个低版本的Go提供编译环境)

1
2
3
4
gvm install go1.4 -B
gvm use go1.4 [--default]
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.5

临时使用指定的Go版本,加上--default参数指定,就可以默认使用该版本

1
2
gvm use go1.4
gvm use go1.4 --default

列出已安装的Go版本,在当前正在使用的版本前面会有=>的前缀

1
gvm list

列出所有可供下载的Go版本

1
gvm listall

卸载Go1.5

1
gvm uninstall go1.5

卸载

GVM提供了完全删除GVM自身和所有已安装的Go版本和软件包的命令

1
gvm implode

Node.js 开发环境

NVM

NVM 官方仓库 nvm就是node.js的版本管理工具,在开发中可以通过它来安装和切换不同的node.js版本

安装

如果使用zsh或者fish,则将下面的bash替换为你所使用的shell

1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

测试安装是否成功,关闭终端打开一个新的终端执行以下命令,输出nvm则表示安装成功

1
command -v nvm

使用

列出所以可下载安装的Nodejs版本

1
nvm ls-remote

列出已安装的Nodejs版本,在当前正在使用的版本前面会有->的前缀

1
nvm list

安装指定版本的Nodejs

1
nvm install v18.15.0

临时使用指定版本的Nodejs

1
nvm use v18.15.0

默认使用指定版本的Nodejs

1
nvm alias default v18.15.0

卸载指定版本的Nodejs

1
nvm uninstall v18.15.0

卸载

删除源文件目录

1
rm -rf .nvm

删除.bashrc.bash_profile.zshrcprofile文件中安装SDKMAN时写入的初始化配置信息,如果这些文件存在的话,具体要删除的代码片段如下

1
source /usr/share/nvm/init-nvm.sh

补充说明

NVM在国内可能存在无法下载或者下载很慢的问题,可在.bashrc.bash_profile.zshrc中选择bashzsh对应的配置文件里添加以下配置

1
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node

参考资料

SDK管理利器:SDKMAN!

Java 多版本管理工具(自由切换Java版本)Jenv使用(支持Linux Mac Windows)

Java JDK使用SDKMAN、JEnv和Jabba安装配置及版本切换

如何灵活地进行 Go 版本管理

Golang 多版本管理

nvm安装-linux篇

  • 标题: 多版本环境控制
  • 作者: Entropy
  • 创建于 : 2023-03-12 16:05:02
  • 更新于 : 2023-04-01 08:54:38
  • 链接: https://www.entropy-tree.top/2023/03/12/more-env-control/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论