25

我有 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,它根本不使用 Java 1.7。因此,我无法使用 1.7 编译我的代码!我必须使用 1.6,但我未能找到删除 1.7 或强制在 1.6 上进行构建/编译的方法。

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

4

3 回答 3

69

,等命令行工具对环境变量的值很敏感,java如果此变量指向 1.6 JDK,将使用 1.6。该工具是您的朋友。跑步javacJAVA_HOME/usr/libexec/java_home

/usr/libexec/java_home

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

/usr/libexec/java_home -v '1.6*'

将返回系统上JAVA_HOME可用的最佳1.6 JDK 的值。您可以使用此值来设置JAVA_HOME

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`

或者作为特定终端会话的一次性使用,或者通过将上述行添加到.bash_profile主目录中的文件来永久用于所有未来的终端会话。


$ export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`
$ java -version
java version "1.6.0_37"
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)
$ export JAVA_HOME=`/usr/libexec/java_home -v '1.7*'`

$ java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
于 2012-11-27T23:27:58.460 回答
1

如果您需要编写要在以前版本的 Java 上运行的代码,则可以更改编译标志。这可能就是您所需要的,并且

例如。

javac -source 1.6 -target 1.6 MyClass.java

源 arg 指出源是用该版本的 Java 编写的,因此List<String> strings = new ArrayList<>();会出现编译错误。Target 告诉编译器编译针对指定 JVM 版本的字节码。虽然我认为 1.7 完全向后兼容 1.5 和 1.6。

于 2012-11-28T14:55:19.033 回答
0

我遇到了类似的问题。安装 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)
于 2013-11-21T20:46:14.720 回答