首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Jenv更改Mac中的JDK

无法使用Jenv更改Mac中的JDK
EN

Stack Overflow用户
提问于 2020-05-26 07:54:00
回答 3查看 7.9K关注 0票数 5

我使用的是,之前我的Mac中只安装了1.8,昨天我使用Mac包安装程序安装了11,之后它将我的默认java版本更改为11。

在Mac上,我遵循高评级的关于Jenv的媒体博客来管理多个版本,但我的默认java版本仍然没有切换到1.8,并且在遵循堆栈溢出答案或中间帖子时没有出现任何错误。

命令使用Jenv

jenv版本

代码语言:javascript
复制
  system
  1.8
* 1.8.0.252 (set by /Users/my user/.jenv/version) // note `*` that should tell the current version IMO
  11
  11.0
  11.0.7
  corretto64-1.8.0.252
  corretto64-11.0.7

java -version输出

java 11.0.7 2020-04-14 LTS openjdk运行时环境Corretto-11.0.7.10.1 (构建11.0.7+10-LTS) OpenJDK 64位服务器VM Corretto-11.0.7.10.1 (构建11.0.7+10-LTS,混合模式)

注意:我有多个使用不同JDK版本的应用程序,我不想使用别名的方式来管理JDK版本,我对Jenv很感兴趣,在这里我可以在全球范围内设置JDK版本(在我的例子中为1.8),并在本地设置(基于JDK特定应用程序使用的)。

EN

回答 3

Stack Overflow用户

发布于 2020-10-30 05:17:31

您所看到的问题是,jenv没有为您的终端正确设置。根据您的终端,您应该查看您的.bash_profile或.zshrc,并确保存在以下行:

代码语言:javascript
复制
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

您可以通过运行which java来测试是否在终端中正确初始化了jenv。如果正确初始化了jenv,您将看到如下内容:

代码语言:javascript
复制
/Users/your-username/.jenv/shims/java

如果您没有看到这一点,请重复检查上面描述的.bash_profile或.zshrc。我还建议您将这些内容放在文件的末尾,这样您就可以确保将jenv添加到路径的开头。

jenv背后的魔力是jenv init。当您打开终端时,它将运行并更新您的路径,以查看~/.jenv/shims,其中包含一个shim (shell脚本),当您运行java或其他JRE/JDK命令时,该脚本将解析您想要的Java版本。

票数 20
EN

Stack Overflow用户

发布于 2020-05-26 08:10:58

尝试在.bash_profile、.zshrc或.bashrc中添加与macOS相关的内容。

代码语言:javascript
复制
jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
 }

然后,重新启动终端,您可以切换java版本,如:

  • jdk 1.8
  • jdk 11
票数 3
EN

Stack Overflow用户

发布于 2020-05-26 08:07:13

在幕后,jenv使用/Library/Java/JavaVirtualMachines目录。

然后还可以键入/usr/libexec/java_home -V以显示所有可用的JDK并分析您的问题:

代码语言:javascript
复制
Matching Java Virtual Machines (4): 
11.0.2_2-OracleJDK, x86_64: "Java SE 11.0.2" /Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Home 
11.0.2_1-OpenJDK, x86_64: "OpenJDK 11.0.2" /Library/Java/JavaVirtualMachines/OpenJDK-jdk-11.0.2.jdk/Contents/Home 
1.8.0_11, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home 
1.7.0_45, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home 

/Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Home

在这个例子中,export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)设置了JDK1.8版本。

因此,您甚至可以定义以下别名:

代码语言:javascript
复制
java11_OpenJDK_export='export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.2_1-OpenJDK)'
java11_OracleJDK_export='export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.2_2-OracleJDK)'
java7_export='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)'
java8_export='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)'

Contents/Info.plist文件部分JVMVersion中的每个JDK安装中定义了要在java_home -v之后使用的版本。

我修改了它,以便在OpenJDK和Oracle之间轻松切换:

代码语言:javascript
复制
$ tail -5 /Library/Java/JavaVirtualMachines/OpenJDK-jdk-11.0.2.jdk/Contents/Info.plist | head -2
<key>JVMVersion</key>
<string>11.0.2_1-OpenJDK</string>

$ tail -5 /Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Info.plist | head -2
<key>JVMVersion</key>
<string>11.0.2_2-OracleJDK</string>

因此,在您的情况下,您有两个1.8版本(1.8和1.8.0.252)。您很可能应该更新他们的Contents/Info.plist文件节JVMVersion

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62017152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档