如何在Mac OS X 10.7.5上恢复到Java 1.6

如何在Mac OS X 10.7.5上恢复到Java 1.6,java,macos,Java,Macos,我有1.6安装程序。我用过。它没有改变我的Java安装,也没有说有旧版本,但它确实完成了安装 我一直在使用符号链接,但无论我做什么,运行 java -version 在终端总是导致 Daves-MacBook-Pro:core-server dave$ java -version java version "1.7.0_07" Java(TM) SE Runtime Environment (build 1.7.0_07-b10) Java HotSpot(TM) 64-Bit Server

我有1.6安装程序。我用过。它没有改变我的Java安装,也没有说有旧版本,但它确实完成了安装

我一直在使用符号链接,但无论我做什么,运行

java -version
在终端总是导致

Daves-MacBook-Pro:core-server dave$ java -version
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)
我的应用程序使用GAE,它根本不使用Java1.7。因此,我无法使用1.7编译我的代码!我必须使用1.6,但我未能找到一种方法来删除1.7或强制在1.6上进行构建/编译


最后,我在命令行上运行一个构建工具,因此在Eclipse中更改项目的设置似乎没有帮助

java、
javac
等。命令行工具对
java\u HOME
环境变量的值很敏感,如果该变量指向1.6 JDK,则将使用1.6。工具
/usr/libexec/java\u home
是您在这里的朋友。运行

/usr/libexec/java_home
将为系统上最新的JDK打印相应的
JAVA_HOME
值。这将是Java 7,但您可以使用
-v
标志应用约束,例如

/usr/libexec/java_home -v '1.6*'
将返回系统上可用的最佳1.6 JDK的
JAVA_HOME
值。您可以使用此值设置
JAVA\u HOME

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`
通过将上述行添加到主目录中的
.bash\u profile
文件,可以作为特定终端会话的一次性操作,也可以永久性地用于所有未来的终端会话



如果需要编写要在早期版本的Java上运行的代码,那么可以更改编译标志。这可能就是你所需要的一切

例如


source arg表示源代码是用该版本的Java编写的,因此
List strings=new ArrayList()将是一个编译错误。目标告诉编译器编译针对JVM指定版本的字节码。尽管我认为1.7与1.5和1.6完全向后兼容。

我遇到了类似的问题。安装JDK7后,我的一些应用程序不再工作。我需要回到JDK6,我的做法有所不同。我注意到在我的/System/Library/Frameworks/JavaVM.framework/Versions/中,它显示了以下内容:

lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.6.0 -> CurrentJDK
drwxr-xr-x  8 root  wheel  272 Oct 25 18:06 A
lrwxr-xr-x  1 root  wheel    1 Oct 25 17:01 Current -> A
lrwxr-xr-x  1 root  wheel   59 Nov 20 21:40 CurrentJDK -> /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/
所以我删除了符号链接CurrentJDK

 sudo rm CurrentJDK
并重新创建指向JDK6的符号链接,它仍然在我的Mac上

sudo ln -s  /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ CurrentJDK
这对我来说是个好办法

java -version
   java version "1.6.0_65"
   Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
   Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

您的系统首选项中没有Oracle Java首选项吗?您也可以在la中手动执行此操作,或者如果备份了旧的Java Preferences应用程序,您也可以还原它。我正在使用export命令更改环境变量Java_HOME-但是当我随后重新运行/usr/libexec/Java_HOME时,它仍然返回1.7.0作为当前JDK链接!除了运行命令外,我还需要做些什么来强制更新JAVA_HOME吗?@Davek804我编辑了我的帖子,以使事情更清楚-
/usr/libexec/JAVA_HOME
命令不会告诉您当前使用的JAVA;它的工作是找到一个合适的值,您可以将它放入
JAVA\u HOME
。几乎,唯一的问题是您仍然在编译1.7类库。如果您尝试引用1.6中不存在的类或方法,编译器不会抱怨,但它会在运行时失败,出现
NoSuchMethodError
。您需要安装1.6类库,并将编译器的引导类路径设置为指向该类路径,以使其捕获这些情况。是的,我应该提到这一点。我以前在荡秋千的时候就被这件事弄糊涂了。我的建议更像是一个建议
sudo ln -s  /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ CurrentJDK
java -version
   java version "1.6.0_65"
   Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
   Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)