苹果';s最近的Java更新删除了Java首选项,如何从shell中更改?
苹果本周的Java更新将Java Preferences.app从实用程序中删除。当在不同的开发环境中使用不同版本的Java时,从Java6到Sun的1.7似乎不再像以前那样容易实现 我相信仍然应该有一个shell机制来实现这一点,但是我并不容易找到它在shell会话中,如何正确更改Java的当前活动版本? (我这样说是正确的,因为我想确保所有的环境变量都设置正确,比如JAVA_HOME、it's path等。)苹果';s最近的Java更新删除了Java首选项,如何从shell中更改?,java,macos,bash,shell,zsh,Java,Macos,Bash,Shell,Zsh,苹果本周的Java更新将Java Preferences.app从实用程序中删除。当在不同的开发环境中使用不同版本的Java时,从Java6到Sun的1.7似乎不再像以前那样容易实现 我相信仍然应该有一个shell机制来实现这一点,但是我并不容易找到它在shell会话中,如何正确更改Java的当前活动版本? (我这样说是正确的,因为我想确保所有的环境变量都设置正确,比如JAVA_HOME、it's path等。) 此外,我认为,几年前,我偶然发现了一个脚本,它可以通过简单地列出选项,然后定义切换
此外,我认为,几年前,我偶然发现了一个脚本,它可以通过简单地列出选项,然后定义切换到哪个选项来为您更改JavaEnv。可能是我对Ubuntu中的工具感到困惑,但我几乎可以肯定它是针对OSX的。。。这将是有帮助的,要么知道这是什么,或者也许我们应该写一个快速脚本,如果一个不存在,将满足这一需要;也许把它插入自制软件中?首先,谢谢你的提问,我需要自己解决这个问题 这就是我学到的
指向java在哪里
/usr/bin/java
是指向/usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
- 在我的Mac电脑上,
是指向当前为Java 1.7.0的/System/Library/Frameworks/JavaVM.framework/Versions/Current
的符号链接/System/Library/Frameworks/JavaVM.framework/Versions/a
Current
重定向到我们想要使用的JVM
在我的系统上,Java 1.6.037安装在/system/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
中,它是指向/system/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
我所做的是
备份当前的代码
sudo mv Current Current.bak
sudo mv Current Current.1.6
创建一个新的符号链接到CurrentJDK
sudo ln -s CurrentJDK Current
然后在命令行中,我做了java-version
,得到了
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
现在,要把它移回去,我只需移动当前的
sudo mv Current Current.bak
sudo mv Current Current.1.6
然后将Current
重新链接到A
sudo ln -s A Current
然后在命令行中,我做了java-version
,得到了
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
现在我需要做的就是sudo mv Current.1.7
和sudo mv Current.1.6 Current
向后移动,反向移动向前移动
这个解决方案的灵感来源于,但我不得不尝试一下,以确保;)
已更新
在玩了一些游戏之后,我创建了一个java6
符号链接,它位于/usr/bin/java6
中,指向/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/java
,这基本上允许我从命令行执行java6
,而无需切换版本,感谢@MadProgrammer最初回答了这个问题。我进一步探索了一些东西,发现了一些例子,这些例子帮助我使用下面的脚本执行Java应用程序,这些应用程序目前无法在Java 1.7中运行:
#!/usr/bin/env bash
# Or plug in `zsh` instead of `bash` above if that is your preferred shell
DIR=$(pwd)
cd "$DIR"
APPLICATION_NAME="App Name"
echo -n "Locating Java ... "
PLATFORM=$(uname)
JAVA_PATH="java"
JAVA_VER=$($JAVA_PATH -version 2>&1 | sed 's/java version "\(.*\)\.\(.*\)\..*"/\1\2/; 1q')
if [[ "$JAVA_VER" == *"command not found"* ]]; then
echo "Java not found."
else
JAVA_VER_FULL=$($JAVA_PATH -version 2>&1 | awk -F '"' '/version/ {print $2}')
if [[ $JAVA_VER -eq 17 ]]; then
echo "v1.7 found."
if [[ $PLATFORM -eq "Darwin" ]]; then
echo "[!!!] WARNING: Java v1.7 on OS X is known to have problems with ${APPLICATION_NAME}."
echo -n "Looking for compatible version of Java ... "
JAVA_PATH="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java"
if [[ -f "$JAVA_PATH" ]]; then
JAVA_VER=$($JAVA_PATH -version 2>&1 | sed 's/java version "\(.*\)\.\(.*\)\..*"/\1\2/; 1q')
JAVA_VER_FULL=$($JAVA_PATH -version 2>&1 | awk -F '"' '/version/ {print $2}')
if [[ $JAVA_VER -eq 16 ]]; then
echo "$JAVA_VER_FULL found. Using this version."
else
echo "No known compatible versions of Java could be found. ${APPLICATION_NAME} may not run properly, or at all."
fi
fi
else
echo "$JAVA_VER_FULL found."
fi
else
echo "$JAVA_VER_FULL found."
fi
fi
echo ""
echo "Starting ${APPLICATION_NAME}..."
# Insert the java application or jar that you wish to execute here prepended by `$JAVA_PATH` instead of simply `java`
# For example:
#
# $JAVA_PATH -jar /path/to/the/application.jar
一种可能有用的情况是创建一个脚本来运行Minecraft,该脚本在1.7版本场景中存在问题。显然,还有其他类似的应用程序存在不同程度的问题,这同样有助于控制您希望使用的Java版本,而不仅仅是使用默认方法或尝试破解符号链接。您可以重新安装苹果的Java 6,它应该重新安装preferences实用程序(我还没试过),你可以从我的网站上拿一份,我对“倒退”不太感兴趣但是,我更倾向于使用苹果的参数/约束。因此,在没有旧的首选项面板的情况下工作是我试图理解如何在OS X中完成的,因为使用Linux发行版通常非常简单。这很有趣,因为你已经完成了我所做的工作,但是我现在有一些奇怪的错误。你没有在重新链接之后,您运行java应用程序的环境不会有任何问题吗?老实说,我还没有完全测试过,但它确实给了我一些奇怪的开始。我能够让Netbeans暂时将1.6视为一个单独的平台:PInteresting,我将不得不再玩一些。理想情况下,我们需要将其包装到一个包含在自制软件中的脚本,或者类似的,我认为这对于修改版本来说肯定是非常必要的。你得到了我的投票,把它交给workHey@MadProgrammer是一件痛苦的事情。我在这里添加了另一个答案,我认为它确实更全面地解决了我们的问题,我已经在这方面取得了一些坚实的成功。我我想你可能会对这个选项感兴趣。感谢你最初的回答!现在你只需要做它,这样你就可以根据当前设置为默认值的内容前后翻转它。。。