Davek804
Davek804

Reputation: 2804

How to Revert to Java 1.6 on Mac OS X 10.7.5

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 been working with the symlinks a bit, but no matter what I do, running

java -version

in terminal always results in

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)

My application works with GAE, which does NOT use Java 1.7 at all. As such, I cannot compile my code using 1.7! I have to use 1.6, but I have failed at finding a way to remove 1.7 or otherwise force build/compiling to occur on 1.6.

A final note, I am running a build tool on the command line, so changing the settings of the project in Eclipse does not seem like it will help.

Upvotes: 25

Views: 23991

Answers (3)

Ian Roberts
Ian Roberts

Reputation: 122414

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)

Upvotes: 69

binhn
binhn

Reputation: 1

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)

Upvotes: 0

Dunes
Dunes

Reputation: 40843

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.

Upvotes: 1

Related Questions