Java SDK 多版本管理

本贴最后更新于 1452 天前,其中的信息可能已经时移世改

根据 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 下暂未实验,请自行搜索

清理已有的环境

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

vnEyhj

🀇SDK

nAgnqG

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

安装 SDK

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

bjtAgJ

使用 SDK

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

sdk 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

#查看 java 相关的版本 sdk list java #安装软件语法 # sdk install 软件 你想安装的版本(sdk default java IDENTIFIER) sdk install java 8.0.265.hs-adp # 安装 jdk8 sdk install java 12.0.2.hs-adpt #安装 jdk12 # 如果你是通过 brew 安装了 JDK,则只需纳入 SDK 管理即可 sdk install java JDK8 /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home sdk install java JDK12 /Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home sdk install java JDK14 /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home #--------------------------------------------------------------- #卸载软件语法 # sdk uninstall 软件 软件版本 sdk uninstall java 8.0.265.hs-adp #查看软件现有版本 sdk current java #查看所有本地包的当前版本 sdk current #升级 sdk upgrade java sdk upgrade #自我升级 skd selfupdate #强制重新安装 sdk 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

#↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓卸载SDk↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ $ tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman $ rm -rf ~/.sdkman //最后打开你的 .bashrc、.bash_profile 和/或者 .profile,找到并删除下面这几行。 #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" ##↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑卸载完成↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

🀈 使用 jEnv

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

UMr0UR

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

安装

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

使用

# 利用 brew 安装jdk brew tap homebrew/cask-versions brew update brew cask install adoptopenjdk8 brew cask install adoptopenjdk9 brew cask install adoptopenjdk10 brew cask install adoptopenjdk11 brew cask install adoptopenjdk12 #安装路径在:/Library/Java/JavaVirtualMachines #展示所有的jdk版本 /usr/libexec/java_home -V #管理JDK,语法,jenv add <jdk_path> jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home # 如果遇到:ln: /usr/local/opt/jenv/versions/oracle64-1.7.0.51: No such file or directory ## 参考:https://github.com/jenv/jenv/wiki/Trouble-Shooting //使用 jenv versions //展示所有环境 jenv global 1.8 //相当于设置环境变量 jenv local 10.0 //项目级别的jdk //删除版本(只是删除链接) jenv 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).

安装

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

用法

# list available JDK's jabba ls-remote # you can use any valid semver range to narrow down the list jabba ls-remote zulu@~1.8.60 jabba ls-remote "*@>=1.6.45 <1.9" --latest=minor # install Oracle JDK jabba install 1.15.0 # install Oracle Server JRE jabba install sjre@1.8 # install Adopt OpenJDK (Hotspot) jabba install adopt@1.8-0 # install Adopt OpenJDK (Eclipse OpenJ9) jabba install adopt-openj9@1.9-0 # install Zulu OpenJDK jabba install zulu@1.8 jabba install zulu@~1.8.144 # same as "zulu@>=1.8.144 <1.9" # install IBM SDK, Java Technology Edition jabba install ibm@1.8 # install GraalVM CE jabba install graalvm@1.0-0 # install OpenJDK jabba install openjdk@1.10-0 # install OpenJDK with Shenandoah GC jabba install openjdk-shenandoah@1.10-0 # install from custom URL # (supported qualifiers: zip (since 0.3.0), tgz, tgx (since 0.10.0), dmg, bin, exe) jabba install 1.8.0-custom=tgz+http://example.com/distribution.tar.gz jabba install 1.8.0-custom=tgx+http://example.com/distribution.tar.xz jabba install 1.8.0-custom=zip+file:///opt/distribution.zip # uninstall JDK jabba uninstall zulu@1.6.77 # link system JDK jabba link system@1.8.72 /Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk # list all installed JDK's jabba ls # switch to a different version of JDK (it must be already `install`ed) jabba use adopt@1.8 jabba use zulu@~1.6.97 echo "1.8" > .jabbarc # switch to the JDK specified in .jabbarc (since 0.5.0) jabba use # set default java version on shell (since 0.2.0) # this version will automatically be "jabba use"d every time you open up a new terminal jabba alias default 1.8

🀊 使用自定义终端脚本

# 1. 安装所需的jdk版本 brew cask install homebrew/cask-versions/java8 brew update brew cask install adoptopenjdk8 brew cask install adoptopenjdk9 brew cask install adoptopenjdk10 brew cask install adoptopenjdk11 brew cask install adoptopenjdk12 #安装路径在:/Library/Java/JavaVirtualMachines #展示所有的jdk版本 /usr/libexec/java_home -V #2. 编写脚本 //最简单但繁琐的方式 export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home //最佳实践 //------.bash_profile编辑开始-------- vi ~/.bash_profile # JDK 6、JDK 8、JDK 12 的 export 命令 export JDK6_HOME="/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home" export JDK8_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home" export JDK12_HOME="/Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home" //或者按以下方式 export JAVA_HOME=$(/usr/libexec/java_home -v14) export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8) export JAVA_11_HOME=$(/usr/libexec/java_home -v11) export JAVA_14_HOME=$(/usr/libexec/java_home -v14) # alias 命令链接到 export 命令 alias jdk6="export JAVA_HOME=$JDK6_HOME" alias jdk8="export JAVA_HOME=$JDK8_HOME" alias jdk12="export JAVA_HOME=$JDK12_HOME" # 或者以下方式 alias java8='export JAVA_HOME=$JAVA_8_HOME' alias java11='export JAVA_HOME=$JAVA_11_HOME' alias java14='export JAVA_HOME=$JAVA_14_HOME' #设置默认的JDK export jdk8 #或者以下方式 export JAVA_HOME=$(/usr/libexec/java_home -v14) //------.bash_profile编辑结束-------- :wq! source ~/.bash_profile //使用,在bash中输入 jdk6/jdk8/jdk12 回车,切换java环境变量 jdk6

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

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 1 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • 编程语言
    17 引用 • 36 回帖
  • 软件工程
    29 引用 • 81 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...