如何更改mac上的Java默认版本?
当前回答
在不需要安装额外工具的情况下,让/usr/ libeexec /java_home -V将单独安装的JDK识别为一级成员的简单方法是如下所示的符号链接:
sudo ln -s <path> /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
<path>是一个包含Contents/Home/bin等子目录的目录。
一个常见的用例是注册Android Studio中包含的JDK/JRE:
在macOS上最新版本的Android Studio中,Java工具的默认位置是/Applications/Android\ Studio.app/Contents/jre。我们将使用jdk-android-studio。JDK作为标识符:
sudo ln -s /Applications/Android\ Studio.app/Contents/jre /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
现在,/usr/libexec/java_home -V将在匹配Java虚拟机下列出它:
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
11.0.13 (arm64) "JetBrains s.r.o." - "OpenJDK 11.0.13" /Applications/Android Studio.app/Contents/jre/Contents/Home
/Applications/Android Studio.app/Contents/jre/Contents/Home
其他回答
如果你用的是fish,而你用的是mac,你希望能够在JDK之间切换,那么下面对我来说适用于mac。
@kenglxn的答案对我不起作用,我发现它没有设置-g,这是全局的!
放在~/.config/fish/config.fish下面
alias j8="jhome -v 1.8.0_162"
alias j9="jhome -v 9.0.1"
function jhome
set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
funcsave jhome
要了解您已安装的版本/次要版本,您可以执行以下操作:
/usr/libexec/java_home -V 579ms Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_162, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
以前我在.zshrc中使用别名,以便在版本之间轻松切换,但今天我使用SDKMAN。 SDKMAN还可以为系统设置默认java,以及下载和安装新的java版本。
一旦安装了sdkman,您就可以执行类似于nvm工具处理节点版本的命令。
Java将列出您的系统上可用的Java版本以及可在线安装的Java版本,包括您可以在SDK使用,SDK默认和SDK安装命令中使用的标识符。
例如,安装Amazon Corretto 11.0.8并询问它是否应该是新的默认值,这样做: SDK安装Java 11.0.8-amzn
我还经常使用的一个特性是.sdkmanrc文件。 如果你把它放在你机器上的一个目录中,并在该目录中运行sdk env命令,那么你可以配置只在该目录中使用的工具版本。也可以使用sdkman_auto_env=true配置使sdkman自动切换工具版本。
sdkman还支持为JVM处理其他工具,如gradle, kotlin, maven等等。
欲了解更多信息,请访问https://sdkman.io/usage#env
检查Java版本:Java -version
版本切换:https://devqa.io/brew-install-java/
开放的~ / . bash_profile
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
别名java8=“出口JAVA_HOME=$ java_8_homs” 别名java11=“出口JAVA_HOME=$ java_11_homs”
源~ / . bash_profile
当我们切换到java11或java8时,java -version命令没有显示正确的版本。
在这种情况下,使用mvn -version查看用于构建解决方案的正确java版本
这有点棘手,但请尝试遵循在OS X 10.9 (Mavericks)上安装Java中描述的步骤。基本上,你得把你的别名更新为java。
循序渐进:
在安装JDK 1.7之后,您将需要执行sudo ln -snf命令来更改到当前java的链接。要做到这一点,打开Terminal并发出命令:
sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
注意,目录jdk1.7.0_51. conf。jdk可能会根据您安装的SDK版本而变化。
现在,您需要将JAVA_HOME设置为指向jdk_1.7.0_xx的位置。安装JDK。再次打开终端,输入:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
您可以在您的.bashrc文件中添加上面的export JAVA_HOME行,以使java永久地存在于您的终端中
来自Apple官方java_home(1)手册页:
**USAGE**
/usr/libexec/java_home helps users set a $JAVA_HOME in their login rc files, or provides a way for
command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
tecture requirement. The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
which is useful for starting Java command-line tools from launchd plists without hardcoding the full
path to the Java command-line tool.
Usage for bash-style shells:
$ export JAVA_HOME=`/usr/libexec/java_home`
Usage for csh-style shells:
% setenv JAVA_HOME `/usr/libexec/java_home`
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder