I have the 1.6 installer. I\'ve used it. It does not change my Java installation, nor say there is an older version, but it does complete the installation.
I\'ve bee
The java
, javac
, etc. command line tools are sensitive to the value of the JAVA_HOME
environment variable and will use 1.6 if this variable points to a 1.6 JDK. The tool /usr/libexec/java_home
is your friend here. Running
/usr/libexec/java_home
will print out the appropriate JAVA_HOME
value for the most up to date JDK on your system. This will be Java 7, but you can apply constraints using the -v
flag, for example
/usr/libexec/java_home -v '1.6*'
will return a JAVA_HOME
value for the best available 1.6 JDK on your system. You can use this value to set JAVA_HOME
:
export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`
either as a one-off for a particular Terminal session, or permanently for all future terminal sessions by adding the above line to the .bash_profile
file in your home directory.
$ 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)
I ran into a similar problem. After having installed JDK7, some of my applications no longer worked. I needed to revert back to JDK6, and I did it differently. I noticed that in my /System/Library/Frameworks/JavaVM.framework/Versions/, it showed the following:
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/
so I removed the symbolic link CurrentJDK
sudo rm CurrentJDK
and re-created the symbolic link pointing to JDK6, which is still on my Mac
sudo ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ CurrentJDK
and that did the trick for me
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)
If you need to write code that you want to run on a previous version of Java then you can change the compile flags. This might be all you need and
eg.
javac -source 1.6 -target 1.6 MyClass.java
The source arg states that the source is written in that version of Java, thus List<String> strings = new ArrayList<>();
would be a compile error. Target tells the compiler to compile byte code that is aimed at the specified version of the JVM. Though I think 1.7 is fully backwards compatible with 1.5 and 1.6.