Java SDK 多版本管理

  |   0 评论   |   0 浏览

根据 JRebel 的调查报告显示,58% 的开发人员依旧使用 Java 8。虽然,近半同行依旧坚守这 Java 8 ,但是,Java 8 以后,6 个月更新一次,目前最新的 Java 12 已经发布, Java 11 已成为 LTS 版本。所以,紧跟时代潮流,不断学习,是开发者基本的素质(我学不懂啊),要体验新特性,就需要安装不同的 JDK,此时,电脑就有多套环境了,那学习管理 JDK 环境的正确姿势是很有必要的。

☕ Java SDK 多版本管理

很多中间件/框架(比如 Dubbo)需要兼容多个 JDK 版本,开发、测试时需要不断切换版本,通过 JAVA_HOME 手动修改让人痛苦不堪。

之前了解到 Node.js 有很多版本管理工具,例如 nvm,通过 nvm 切换 Node.js 版本只需要一个命令,非常方便高效,幸运的是 Java 也有类似工具或方式来管理多个 JDK 版本,一行命令快速切换环境,无需重复配置环境变量。

本文主要介绍了以下四种工具方式:

  1. SDKMan,目前在用
  2. jEnv
  3. Jabba
  4. 自定义脚本

环境准备

Mac BigSur 11.1

windows 下暂未实验,请自行搜索

清理已有的环境

https://stackoverflow.com/questions/19039752/removing-java-8-jdk-from-mac

 1#移除JDK
 2sudo rm -rf /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk
 3#移除其他插件
 4sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane
 5sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
 6sudo rm -rf /Library/LaunchAgents/com.oracle.java.Java-Updater.plist
 7sudo rm -rf /Library/PrivilegedHelperTools/com.oracle.java.JavaUpdateHelper
 8sudo rm -rf /Library/LaunchDaemons/com.oracle.java.Helper-Tool.plist
 9sudo rm -rf /Library/Preferences/com.oracle.java.Helper-Tool.plist
10#验证
11java --version
12#出现以下弹框,说明清理干净

vnEyhj

🀇SDK

nAgnqG

SDKMAN!是用于在大多数基于 Unix 的系统上管理多个软件开发套件的并行版本的工具。它提供了方便的命令行界面(CLI)和 API,用于安装,切换,删除和列出候选人。它以前被称为 Groovy enVironment Manager GVM,它受到了非常有用的 RVM 和 rbenv 工具的启发,而 Ruby 社区广泛使用了 RVM 和 rbenv 工具。

安装 SDK

1#默认命令行安装,安装位置在:$HOME/.sdkman
2curl -s "https://get.sdkman.io" | bash
3source "$HOME/.sdkman/bin/sdkman-init.sh"
4
5#自定义安装
6export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash
7
8#验证
9sdk version

bjtAgJ

使用 SDK

所有命令请参见:https://sdkman.io/usage

1sdk list //查看支持的软件

支持的软件库:Ant、AsciidoctorJ、Bpipe、BTrace、Ceylon、Concurnas、CRash、CUBA、CXF、Gaiden、Gradle profiler、Grails、Groovy、http4k、Infrastructor、Java、JBakeJ'Bang、Karaf、Kotlin、Kscipt 、Lazybones、Leiningen、Maven、Micronaut、sbt、Scala、Spark、Spring Boot、Sshoogr、Vert.x、VisualVM

 1#查看 java 相关的版本
 2sdk list java
 3#安装软件语法
 4# sdk install 软件 你想安装的版本(sdk default java IDENTIFIER)
 5sdk install java 8.0.265.hs-adp # 安装 jdk8
 6sdk install java 12.0.2.hs-adpt #安装 jdk12
 7
 8# 如果你是通过 brew 安装了 JDK,则只需纳入 SDK 管理即可
 9sdk install java JDK8 /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
10sdk install java JDK12 /Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home
11sdk install java JDK14 /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
12
13#---------------------------------------------------------------
14
15#卸载软件语法
16# sdk uninstall 软件  软件版本
17sdk uninstall java 8.0.265.hs-adp
18#查看软件现有版本
19sdk current java
20#查看所有本地包的当前版本
21sdk current 
22#升级
23sdk upgrade java
24sdk upgrade
25#自我升级
26skd selfupdate
27#强制重新安装
28sdk selfupdate fore

#### 切换 JDK 版本三种方式 🔽 将 Java 版本设置为默认版本 sdk default java JDK8

🔽 仅将 Java 版本用于当前终端会话 sdk use java 14.0.2-oracle

🔽 输入目录时激活特定的 Java 版本 sdk env init

打开 IDEA,可以看到,自动检测到用 sdkman 安装的 JDK

guUhaK

卸载 SDK

1#↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓卸载SDk↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2$ tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman
3$ rm -rf ~/.sdkman
4//最后打开你的 .bashrc、.bash_profile 和/或者 .profile,找到并删除下面这几行。
5#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
6[[ -s "/home/dudette/.sdkman/bin/sdkman-init.sh" ]] && source "/home/dudette/.sdkman/bin/sdkman-init.sh"
7##↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑卸载完成↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

🀈 使用 jEnv

jEnv 是管理工具,不具有安装功能,所以,需要先安装,在用 jEnv 管理环境,安装使用 brew

UMr0UR

2019 年 6 月 brew 要从 AdoptOpenJDK 安装 JDK:

安装

1#安装jEnv
2brew install jEnv
3#↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 将下面配置加入.bash_profile ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
4# To enable shims and autocompletion add to your profile:
5if which jenv > /dev/null; then eval "$(jenv init -)"; fi
6# To use Homebrew's directories rather than ~/.jenv add to your profile:
7export JENV_ROOT=/usr/local/opt/jenv
8#↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

使用

 1# 利用 brew 安装jdk
 2brew tap homebrew/cask-versions
 3brew update
 4brew cask install adoptopenjdk8
 5brew cask install adoptopenjdk9
 6brew cask install adoptopenjdk10
 7brew cask install adoptopenjdk11
 8brew cask install adoptopenjdk12
 9#安装路径在:/Library/Java/JavaVirtualMachines
10
11#展示所有的jdk版本
12/usr/libexec/java_home -V
13
14#管理JDK,语法,jenv add <jdk_path>
15jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
16jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home
17jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
18
19# 如果遇到:ln: /usr/local/opt/jenv/versions/oracle64-1.7.0.51: No such file or directory
20## 参考:https://github.com/jenv/jenv/wiki/Trouble-Shooting
21
22//使用
23jenv versions //展示所有环境
24jenv global 1.8 //相当于设置环境变量
25jenv local 10.0  //项目级别的jdk
26
27//删除版本(只是删除链接)
28jenv remove xxx

参考:https://sourl.cn/uTzSpD

🀉Jabba

Java Version Manager inspired by nvm (Node.js). Written in Go.

The goal is to provide unified pain-free experience of installing (and switching between different versions of) JDK regardless of the OS (macOS, Linux x86/x86_64/ARMv7+, Windows x86_64).

安装

1curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

用法

 1# list available JDK's
 2jabba ls-remote
 3# you can use any valid semver range to narrow down the list
 4jabba ls-remote zulu@~1.8.60
 5jabba ls-remote "*@>=1.6.45 <1.9" --latest=minor
 6
 7# install Oracle JDK
 8jabba install 1.15.0
 9# install Oracle Server JRE
10jabba install sjre@1.8  
11# install Adopt OpenJDK (Hotspot)
12jabba install adopt@1.8-0
13# install Adopt OpenJDK (Eclipse OpenJ9)
14jabba install adopt-openj9@1.9-0
15# install Zulu OpenJDK
16jabba install zulu@1.8
17jabba install zulu@~1.8.144 # same as "zulu@>=1.8.144 <1.9" 
18# install IBM SDK, Java Technology Edition
19jabba install ibm@1.8
20# install GraalVM CE
21jabba install graalvm@1.0-0
22# install OpenJDK
23jabba install openjdk@1.10-0
24# install OpenJDK with Shenandoah GC
25jabba install openjdk-shenandoah@1.10-0
26
27# install from custom URL
28# (supported qualifiers: zip (since 0.3.0), tgz, tgx (since 0.10.0), dmg, bin, exe)
29jabba install 1.8.0-custom=tgz+http://example.com/distribution.tar.gz
30jabba install 1.8.0-custom=tgx+http://example.com/distribution.tar.xz
31jabba install 1.8.0-custom=zip+file:///opt/distribution.zip
32
33# uninstall JDK
34jabba uninstall zulu@1.6.77
35
36# link system JDK
37jabba link system@1.8.72 /Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk
38
39# list all installed JDK's
40jabba ls
41
42# switch to a different version of JDK (it must be already `install`ed)
43jabba use adopt@1.8
44jabba use zulu@~1.6.97
45
46echo "1.8" > .jabbarc
47# switch to the JDK specified in .jabbarc (since 0.5.0)
48jabba use
49
50# set default java version on shell (since 0.2.0)
51# this version will automatically be "jabba use"d every time you open up a new terminal
52jabba alias default 1.8

🀊 使用自定义终端脚本

 1# 1. 安装所需的jdk版本
 2brew cask install homebrew/cask-versions/java8
 3brew update
 4brew cask install adoptopenjdk8
 5brew cask install adoptopenjdk9
 6brew cask install adoptopenjdk10
 7brew cask install adoptopenjdk11
 8brew cask install adoptopenjdk12
 9#安装路径在:/Library/Java/JavaVirtualMachines
10
11#展示所有的jdk版本
12/usr/libexec/java_home -V
13
14#2. 编写脚本
15
16//最简单但繁琐的方式
17export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
18export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
19
20
21//最佳实践
22
23//------.bash_profile编辑开始--------
24vi ~/.bash_profile
25# JDK 6、JDK 8、JDK 12 的 export 命令
26export JDK6_HOME="/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"
27export JDK8_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home"
28export JDK12_HOME="/Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home"
29
30//或者按以下方式
31
32export JAVA_HOME=$(/usr/libexec/java_home -v14)
33
34export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
35export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
36export JAVA_14_HOME=$(/usr/libexec/java_home -v14)
37
38
39# alias 命令链接到 export 命令
40alias jdk6="export JAVA_HOME=$JDK6_HOME"
41alias jdk8="export JAVA_HOME=$JDK8_HOME"
42alias jdk12="export JAVA_HOME=$JDK12_HOME"
43
44# 或者以下方式
45alias java8='export JAVA_HOME=$JAVA_8_HOME'
46alias java11='export JAVA_HOME=$JAVA_11_HOME'
47alias java14='export JAVA_HOME=$JAVA_14_HOME'
48
49#设置默认的JDK
50export jdk8
51#或者以下方式
52export JAVA_HOME=$(/usr/libexec/java_home -v14)
53//------.bash_profile编辑结束--------
54
55:wq!
56source ~/.bash_profile
57
58//使用,在bash中输入 jdk6/jdk8/jdk12 回车,切换java环境变量
59jdk6

标  题:Java SDK 多版本管理
作  者:bugless
出  处:http://bugless.site
创建时间:2021-04-09 16:46:19
关于博主:坐标广州,喜欢折腾各种东西的工程师,如有问题探讨可以直接下方留言。
声援博主:如果您觉得文章对您有帮助,可以评论、订阅、收藏。您的鼓励是博主的最大动力!


标题:Java SDK 多版本管理
作者:bugless
地址:http://bugless.site/articles/2021/04/09/1617958086180.html