Skip to content

Instantly share code, notes, and snippets.

@bric3
Last active April 18, 2023 06:50
  • Star 71 You must be signed in to star a gist
  • Fork 24 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save bric3/1163008 to your computer and use it in GitHub Desktop.
Automate the install of JDK 5 on Lion, Mountain Lion, Mavericks
# _______ _ _ _ _ _
# |__ __| | (_) (_) | | | |
# | | | |__ _ ___ ___ ___ _ __ _ _ __ | |_ _ __ ___ _____ _____ __| |
# | | | '_ \| / __| / __|/ __| '__| | '_ \| __| | '_ ` _ \ / _ \ \ / / _ \/ _` |
# | | | | | | \__ \ \__ \ (__| | | | |_) | |_ | | | | | | (_) \ V / __/ (_| |
# |_| |_| |_|_|___/ |___/\___|_| |_| .__/ \__| |_| |_| |_|\___/ \_/ \___|\__,_|
# | |
# |_|
#
# New home : https://github.com/bric3/osx-jdk5-installer
#!/bin/bash
# This script is edited by Brice Dutheil
# See there in french http://blog.arkey.fr/2012/07/30/script-pour-installer-le-jdk-5-sur-macosx-lion/
# Translate button is broken for now, please use Google to translate this website.
#
# 2014/02/10 Updated the script to run on OSX 10.9 Maverick
#
# 2013/05/11 Added a few more guidance when Java Preferences is not available anymore
# Added a simple example of a JDK switch function.
#
# 2012/08/25 This script didn't behave correctly when ran on 10.8.1
# Added recommendation to always run this script after updates such as Java, XCode, OSX, etc.
#
# 2O12/07/29 Added Mountain Lion support => Choose the 64bit JVM !
# Can dowload the Java DMG itself if not present in same directory
# Colored the output a bit, works well on a black background
# Added tips for using the different JVMs
# Removed 32bit mode for Mountain Lion (Thanks to Henri Gomez for pointing me to 'ditto')
#
# 2011/12/04 Added warnings and some more information on gotchas
#
# 2011/08/25 Updated this very comments
#
# 2011/08/22 Initial version (Thanks to Benjamin Morin for his blog post)
# This script heavily inspired/copied from http://www.s-seven.net/java_15_lion
#some variables
javadmgurl='http://support.apple.com/downloads/DL1359/en_US/JavaForMacOSX10.5Update10.dmg'
javapkg='JavaForMacOSX10.5Update10'
jvmver='1.5.0_30'
jvms_path='/System/Library/Java/JavaVirtualMachines'
java_frmwk_path='/System/Library/Frameworks/JavaVM.framework/Versions'
pushd `dirname $0` > /dev/null
script_location=`pwd -P`
popd > /dev/null
# locate Java Preferences in /Applications
java_prefs=`mdfind -onlyin /Applications "Java Preferences.app"`
declare "osxname_14=OS 11"
declare "osxname_13=Mavericks"
declare "osxname_12=Mountain Lion"
declare "osxname_11=Lion"
get_osx_name() {
local array="osxname" key=$1
local declare_name="${array}_${key}"
printf '%s' "${!declare_name}"
}
# 13.0.0 = Mavericks = 10.9.0
# 12.1.0 = Mountain Lion = 10.8.1
# 12.0.0 = Mountain Lion = 10.8
# 11.0.0 = Lion = 10.7
darwin_version=`uname -r`
osx_version=`sw_vers -productVersion`
osx_commercial_name=$(get_osx_name ${darwin_version%.[0-9].[0-9]})
test ${darwin_version/1[2-9]./} != $darwin_version && is_mountain_lion=true
# colors and style
RESET=`tput sgr0`
RED=`tput setaf 1`
BLUE=`tput setaf 4`
PURPLE=`tput setaf 5`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
UNDERLINED=`tput smul`
BOLD=`tput bold`
# escape aware echo
echo() { builtin echo -e $@; }
# Make sure only root can run the script
if [ $EUID -ne 0 ]; then
echo $RED'This script must be run as root in order to install the JDK! If unsure why check the script.'$RESET 1>&2
exit 1
fi
# Make sure the user understand he is all alone if something goes wrong
if [ $is_mountain_lion ]; then
echo $BLUE'==>'$RESET' You are using '$BOLD$osx_commercial_name$RESET', the script has been updated to work, however
'$osx_commercial_name' kernel works in 64bit. This shouldn'"'"'t be an issue, as event the JDK 6 32bit is working,
however 32bit mode doesn'"'"'t work for this hacky install of JDK 5. '$YELLOW'It means that only
the 64bit version of the JDK5 will work on your OS.'$RESET
echo
fi
echo $BLUE'==>'$RESET' The present script has been tested on my current setup and is far from
bulletproof, it might not work at all on your system. And there is '$RED'*no
uninstall script*'$RESET' for now!'
echo
echo $BLUE'==>'$RESET' Again '$RED'this script touches system files'$RESET', please be advised you are the sole
responsible to run or '$BOLD'TO NOT'$RESET' run this script on your machine.'
echo
# Reminder about Apple JDK updates
echo $YELLOW$UNDERLINED'NOTES :'$RESET
echo $BLUE'==>'$RESET' Generally speaking it seems that '$YELLOW'applying updates'$RESET' on your system Java, XCode, OSX, etc.
might cause problems with your current install, '$RED'reapply this script after any update if you
experience issues with your Java 5 install.'$RESET
echo $BLUE'==>'$RESET' When '$YELLOW'applying a Java update from Apple'$RESET', some important
symbolic names that refer to this install are resetted to factory default
values, you can just re-apply this script.'$RESET
echo
if [[ -n "$java_prefs" && $is_mountain_lion ]]; then
echo $BLUE'==>'$RESET' For people that where upgrading OS X, it seems this scripts fail to open
Java Preferences app at the end of the script, with an error like that:'
echo $PURPLE'\tLSOpenURLsWithRole() failed with error -10810 for the application /Applications/Utilities/Java Preferences.app.'
echo $PURPLE'\tFSPathMakeRef(/Applications/Utilities/Java Preferences.app) failed with error -43.'
echo
echo $YELLOW' If this is happening, '$RED'you have to (re)install Java 6 !'
echo $YELLOW' You can enter these commands yourself in root mode :'
echo $YELLOW'\tsudo rm -rf /System/Library/Java/JavaVirtualMachines/1.6.0.jdk'
echo '\tsudo rm -rf /System/Library/Java/JavaVirtualMachines'
echo '\tjava'
echo
echo $RESET' This last command will trigger the Java 6 install, then you can run again this script.'$RESET
echo
fi
printf "%s " 'Do you still want to proceed ? (y/n)'
read answer
[ $answer != 'y' ] && echo 'You'"'"'re fine, JDK5 Hacky Install script has been aborted' && exit 1
echo
echo
echo $UNDERLINED'Here we go...'$RESET
# ===================================
echo
if [ ! -f $javapkg.dmg ]; then
echo 'The "Java for Mac OS X 10.5 Update 10" DMG ('"$javapkg.dmg"') was not found locally.'
echo 'Now trying to download the DMG file from Apple website (http://support.apple.com/kb/DL1359).'
echo $javadmgurl' -> '$script_location/$javapkg.dmg
echo -n $BLUE
curl -C - -# -L $javadmgurl -o $script_location/$javapkg.dmg
echo -n $RESET
if [ ! -f $script_location/$javapkg.dmg ]; then
echo 'Couldn'"'"'t download the uptate. Please download it from Apple at :
http://support.apple.com/kb/DL1359'
echo 'And place it in the same folder as this script : '$script_location
exit 1
fi
else
echo 'Using '$javapkg'.dmg file to install "Java for Mac OS X 10.5 Update 10".'
fi
# Extracting the DMG content in temporary location
echo
echo 'Extracting Java for Mac OS X package'
mkdir /tmp/jdk5dmg
hdiutil attach -quiet -nobrowse -mountpoint /tmp/jdk5dmg/ $script_location/$javapkg.dmg
cd /tmp/jdk5dmg/
# too bad pkgutil nor xar cannot stream package content
pkgutil --expand $javapkg.pkg /tmp/jdk5pkg
cd ..
hdiutil detach -quiet -force /tmp/jdk5dmg/
rm -rf /tmp/jdk5dmg/
# Prepare the System JVM path
if [ ! -e $jvms_path ]; then
echo 'Create '$jvms_path', as it does not exist on your system (it might be because
you don'"'"' t have another Java install).'
mkdir -v -p $jvms_path
fi
echo
echo 'Removing previous Java 1.5 file / directory or symbolic links in :'
cd $jvms_path
pwd
rm -rf 1.5
rm -rf 1.5.0
cd $java_frmwk_path
pwd
rm 1.5/ > /dev/null 2>&1 || rm -rf 1.5 > /dev/null 2>&1
rm 1.5.0/ > /dev/null 2>&1 || rm -rf 1.5.0 > /dev/null 2>&1
rm -rf $jvmver 2>&1
echo
echo $UNDERLINED'Preparing JavaVM framework'$RESET
# ================================================
echo
echo 'Extracting JDK 1.5.0 from package payload in :'
cd $java_frmwk_path
pwd
gzip -cd /tmp/jdk5pkg/$javapkg.pkg/Payload | pax -r -s \
',.'$java_frmwk_path'/1.5.0,./'$jvmver',' \
'.'$java_frmwk_path'/1.5.0'
ls -Fld 1.5*
rm -rf /tmp/jdk5pkg/
echo
echo 'Recreating symbolic links to ./'"$jvmver"' for 1.5 and 1.5.0 :'
pwd
ln -svhF ./$jvmver 1.5
ln -svhF ./$jvmver 1.5.0
echo
echo 'Changing values in config files to make JDK work with '$osx_commercial_name
cd $jvmver
/usr/libexec/PlistBuddy -c "Set :JavaVM:JVMMaximumFrameworkVersion 14.*.*" ./Resources/Info.plist
/usr/libexec/PlistBuddy -c "Set :JavaVM:JVMMaximumSystemVersion "$osx_version".*" ./Resources/Info.plist
/usr/libexec/PlistBuddy -c "Add :CFBundleExecutable string libjava.jnilib" ./Resources/Info.plist
ln -siv ./Resources/Info.plist .
echo
echo 'Linking Apple native wrapper'
mkdir ./MacOS
ln -siv ../Libraries/libjava.jnilib ./MacOS
echo
echo $UNDERLINED'Preparing Java Virtual Machine'$RESET
# ====================================================
cd $jvms_path
mkdir -v 1.5.0
cd 1.5.0
pwd
ln -sivh $java_frmwk_path/$jvmver ./Contents
if [ $is_mountain_lion ]; then
echo
echo $BOLD'REMINDER'$RESET' : You are using '$osx_commercial_name' which is running a '$BOLD'64 bit kernel'$RESET', this causes segfaults
when the Java 5 JVM is run in 32 bit mode. For this reason this script removes 32bit mode on this JVM.'$RESET
ditto --arch x86_64 $java_frmwk_path/$jvmver $java_frmwk_path/$jvmver-x64
rm -rf $java_frmwk_path/$jvmver
mv $java_frmwk_path/$jvmver-x64 $java_frmwk_path/$jvmver
fi
echo
echo $UNDERLINED'Almost over...'$RESET
# ====================================
echo
# opening Java Preferences
if [ -n "$java_prefs" ]; then
# open -a "/Applications/Utilities/Java Preferences.app"
echo $BLUE'==> TIP'$YELLOW' : If you are using applications that need Java 6, but some other command line apps that require JDK 5 :'
echo ' - keep the "Java SE 6" entry at the top in "Java Preferences"'
echo ' - use the Apple "/usr/libexec/java_home" tool, for example to choose the "J2SE 5.0 64-bit" version :'
echo $PURPLE'\texport JAVA_HOME=`/usr/libexec/java_home -F -v 1.5 -a x86_64 -d64`'$RESET
echo
echo 'Now check that JDK 5 appears in Java Preference App, if yes the install is successful, otherwise
try asking the internet :-/'
open -a "$java_prefs"
else
echo $RED'This script could not find the Java Preferences, maybe you moved it elsewhere, or maybe you are running
a recent version of MacOSX.'$RESET
echo 'In recents MacOSX, Apple decided to remove the Java Preference app, which means you
cannot reorder the JDK Preferences, hence you cannot choose JDK5 as a defaukt JDK for the whole OS,
you can only specify it in the terminal via the $PATH variable.'
echo
echo 'Check that /usr/libexec/java_home knows about JDK5, other wise try asking the internet :-/'
fi
echo '(starting here : '$YELLOW'https://gist.github.com/1163008#comments'$RESET')'
echo
echo
echo $UNDERLINED'/usr/libexec/java_home says :'$RESET
# ===================================================
# listing JVMs on local machine
echo $(/usr/libexec/java_home -V 2>&1 | sed -E 's,$,\\n,g' | sed -E 's,.*J2SE 5.0.*,\\033[0;33m&\\033[00m,')
echo $UNDERLINED'java -version says :'$RESET
echo $(/usr/libexec/java_home -F -v 1.5 -a x86_64 --exec java -version 2>&1 | sed -E 's,$,\\n,g' | sed -E 's,java version.*,\\033[0;33m&\\033[00m,')
echo
echo $UNDERLINED'You can also try the java 5 command yourself'$RESET
# ==================================================================
# possible commands
echo $GREEN'\t/usr/libexec/java_home -F -v 1.5 -a x86_64 --exec java -version'$RESET
echo $GREEN'\t`/usr/libexec/java_home -F -v 1.5 -a x86_64`/bin/java -version'$RESET
echo
echo 'Don'"'"'forget to update the JAVA_HOME accordingly!'
echo
printf "%s" 'Yeah I got it ! (Press Enter) '
read -s -n 0 key_press
echo
echo
echo
echo $BLUE'==> TIP'$RESET' : To switch the JDK version in your shell you can use the great '$BOLD'jenv'$RESET' project ('$YELLOW'https://github.com/gcuisinier/jenv'$RESET'),
that can easily switch your JDK version globally or per shell or folder.'
echo 'jenv pretty much covers for the terminal what the Java Preference app did, but in much usable way for terminal users.'
echo
echo 'The old school way would be to change the java runtime with the correct runtime path in $JAVA_HOME and $PATH'
echo 'Below is a simple function that you can put in your shell rc (.bashrc, .zshrc, ...) that automates steps
to switch the JDK to the wanted version. Adapt it to your needs. It uses the Apple tool : /usr/libexec/java_home'
echo
# /System/Library/Java/JavaVirtualMachines/1.5.0/Contents/Home/bin
# /Library/Java/JavaVirtualMachines/jdk1.7.0_13.jdk/Contents/Home/bin
echo $GREEN'\tfunction switch_jdk() {'
echo '\t\tlocal wanted_java_version=$1'
echo '\t\texport JAVA_HOME=`/usr/libexec/java_home -F -v $wanted_java_version -a x86_64 -d64`'
echo '\t'
echo '\t\t# cleaned PATH'
echo '\t\texport PATH=$(echo $PATH | sed -E "s,(/System)?/Library/Java/JavaVirtualMachines/[a-zA-Z0-9._]+/Contents/Home/bin:,,g")'
echo '\t'
echo '\t\t# prepend wanted JAVA_HOME'
echo '\t\texport PATH=$JAVA_HOME/bin:$PATH'
echo '\t'
echo '\t\techo "Now using : "'
echo '\t\tjava -version'
echo '\t}'$RESET
echo
echo 'And just use it this way :'
echo $GREEN'\tswitch_jdk 1.5'$RESET
echo $GREEN'\tswitch_jdk 1.7.0_45'$RESET
echo $GREEN'\tswitch_jdk 1.7.0_51'$RESET
echo
echo $RESET'.'
@bric3
Copy link
Author

bric3 commented Sep 24, 2012

Well the way to switch Java versions (especially with java 5) and the way the applications use this might be somehow not compatible.

Also weirdly, I noticed some inconsistencies on the Apple side, where there is the Current symlink and sometime but not always CurrentJDK, CurrentJDK can also disappear when switching the JDK.

Also in my previous posts I though Lotus Notes needed Java 5. I only use Java 5 from the command line, where I can specify actual paths, applications should always use the default Java in my opinion. So if your Java Preferences is already set to Java 6, you should probably create a CurrentJDK symlink pointing to Current or to the path of Java 6.

@Chewbee
Copy link

Chewbee commented Sep 24, 2012

Thanks again for your help, I hope you are not bothered by those Lotus Notes Annoyances ...

On my system I do not have a CurrentJDK linking it to current was my first guess, and I thought it worked in the past but no longer do
<code<drwxr-xr-x 14 root wheel 476 24 sep 13:04 ./
drwxr-xr-x 10 root wheel 340 24 sep 08:27 ../
lrwxr-xr-x 1 root wheel 10 24 sep 08:27 1.4@ -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 24 sep 08:27 1.4.2@ -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 24 sep 08:28 1.5@ -> ./1.5.0_30
lrwxr-xr-x 1 root wheel 10 24 sep 08:28 1.5.0@ -> ./1.5.0_30
drwxr-xr-x 9 root wheel 306 24 sep 08:28 1.5.0_30/
lrwxr-xr-x 1 root wheel 10 24 sep 08:27 1.6@ -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 24 sep 08:27 1.6.0@ -> CurrentJDK
drwxr-xr-x 7 root wheel 238 24 sep 08:27 A/
lrwxr-xr-x 1 root wheel 1 24 sep 08:27 Current@ -> A
lrwxr-xr-x 1 root wheel 7 24 sep 13:04 CurrentJDK@ -> Current
lrwxr-xr-x 1 root wheel 22 19 sep 10:19 Info.plist@ -> ./Resources/Info.plist
drwxr-xr-x 3 root wheel 102 19 sep 10:19 MacOS/
Gmac:Versions gh$ !/App
/Applications/Notes.app/Contents/MacOS/Notes
Gmac:Versions gh$ /Applications/Notes.app/Contents/MacOS/Notes
IBM Lotus Notes:
A Java Runtime Environment (JRE) or Java Development Kit (JDK)
must be available in order to run IBM Lotus Notes. No Java virtual machine
was found after searching the following locations:
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Libraries/libjvm.dylib
Gmac:Versions gh$

Unfortunately ...

@bric3
Copy link
Author

bric3 commented Sep 24, 2012

Weird, I'm really not sure what's happening here. What is the output of your java_home tool ?

It's a little work, but it might be necessary in your case, if you remove every Java install ; then if you install the default Java only (java 6 shipped by Apple), is Lotus Notes working ? If yes proceed step-by-step to see if Lotus Notes is still working when you install other Java VMs, also monitor what's happening in this directory /System/Library/Frameworks/JavaVM.framework/Versions.

Another suggestion, might be to look at Lotus Notes config files, I don't know this application, but there might be some way to configure which Java Home is used (in an Info.plist maybe).

@Chewbee
Copy link

Chewbee commented Oct 1, 2012

Hello,
At the end of the day I found something !!

I reinstalled everything I.e. Java 6 (JDK) Java 7 ( JDK) , Lotus Notes ... Nothing

Then I did a find / -name libjvm.dylib -print &> findError.txt and found that Gmac:~ gh$ cat findError.txt | grep -i libjvm.dylib
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/lib/client/libjvm.dylib
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/lib/server/libjvm.dylib
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/server/libjvm.dylib
/Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home/jre/lib/server/libjvm.dylib
/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0_30/Libraries/libjvm.dylib
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries/libjvm.dylib
/Users/gh/.Trash/1.6.0_29-b11-402.jdk/Contents/Libraries/libjvm.dylib
/Users/gh/.Trash/Developer/Applications/Utilities/Application Loader.app/Contents/MacOS/itms/java/lib/client/libjvm.dylib
/Users/gh/.Trash/Developer/Applications/Utilities/Application Loader.app/Contents/MacOS/itms/java/lib/server/libjvm.dylib
/Users/gh/.Trash/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Libraries/libjvm.dylib
Gmac:~ gh$

So I did udo ln -siv /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents CurrentJDK
CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Et Voila !! ....

I can say I am a dumbass because I should have made this a long time ago but at the end of the day it works, and I was willing to share this here as I polluted this thread comments a lot so I have to show that this is solved for anyone experienceing the same pitfalls ...

I have to add regarding your last answer that the regular java command were working so Java was properly installed on the path but the lack of a proper CurrentJDK seems to be enough to lost Lotus Notes ...

As to choose what Java to force Notes to use I never found out how to do that

Anyway thanks a lot for you help and sorry for the thread pollution

@bric3
Copy link
Author

bric3 commented Oct 1, 2012

Cool that you solved your current issue with Lotus Notes. Still Apple / Oracle Java install conventions switch made a few things inconsistent on the Current / CurrentJDK symbolic links.

I'll probably need to warn users about that inconcistency one day or another.

Thanks for the update anyway :)

@bric3
Copy link
Author

bric3 commented Oct 22, 2012

Seems like the Java Mayhem still continues with Apple and Oracle, in the latest Java 6 update, they removed the Java Preferences application, leaving only the Oracle one, which doesn't show all JDKs you can have, java_home still lists them but doesn't allow to define a default JDK.

http://reviews.cnet.com/8301-13727_7-57533880-263/java-preferences-missing-after-latest-os-x-java-update/

@fabian-hahn
Copy link

Hi, this script worked for Java 1.5. But now it does not show up in Eclipse for Execution Environments. Why do the Apple and Oracle Java have a .jdk-extension, 1.5.0 not?

$ ls -1 /Library/Java/JavaVirtualMachines/ /System/Library/Java/JavaVirtualMachines/
jdk1.7.0_07.jdk
jdk1.7.0_11.jdk
1.5.0
1.6.0.jdk

@bric3
Copy link
Author

bric3 commented Feb 26, 2013

@fabian-hahn Because Apple changed conventions over time, some symbolic names are not the same either, between 1.5 and 1.6. And as Apple do not want anymore to deliver it's own JDK more issues will arise between 1.7 and 1.6.

For example "Java Preferences" app was removed, and I'm not sure I can bet on the future of their java_home command line tool.

For eclipse you have to set it manually, that's what I have to do anyway for different version of Java with IntelliJ.

@rvizcaino
Copy link

Dear people. Oficial Apple download JavaForMacOSX10.5Update10.dmg exists no more. Found it here https://www.macupdate.com/app/mac/13295/apple-java-for-mac-os-x-10.5
That switching jdk function is a beauty, thanks a lot.

@peterdewinter
Copy link

Excellent!

@hansenc
Copy link

hansenc commented Oct 30, 2013

Here's the update for OS X Mavericks (10.9): https://gist.github.com/hansenc/7234566

@bric3
Copy link
Author

bric3 commented Feb 17, 2014

@hansenc Thx, I've updated recently my script to support Mavericks in a convenient way (or at least I believe so). I also added a few refinement and tips.

Bu the way the link in the script still works : http://support.apple.com/downloads/DL1359/en_US/JavaForMacOSX10.5Update10.dmg

@jerryjones2
Copy link

Thanks so much for the script. I just ran it on 10.9.3 and it worked perfectly.

@Chewbee
Copy link

Chewbee commented Aug 7, 2014

Wow I try to use the script on Maverick on a new macbook an it does not work I.e.
after the script runs
java_home cannot find any java VM even if the dirs are ok !!
Any clue ?

many thanks

@aruld
Copy link

aruld commented Oct 15, 2014

I ran the script on Mavericks 10.9.5 and when I run java 5 using java_home it says: Unable to find any JVMs matching architecture "x86_64". Any idea?

mac:work arul$ /usr/libexec/java_home -F -v 1.5 -a x86_64 --exec java -version
Unable to find any JVMs matching architecture "x86_64".

It is not listed in the JVM list when I run:

mac:work arul$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
    1.7.0_67, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home
    1.6.0_65-b14-466.1, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-466.1, i386:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

I can check the version only using this command.

mac:~ arul$ /System/Library/Java/JavaVirtualMachines/1.5.0/Contents/Home/bin/java -version
Cannot run Java in 32 bit mode. Continuing in 64 bit mode.
java version "1.5.0_30"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_30-b03-389-11M4716)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_30-161, mixed mode)

@riy
Copy link

riy commented Oct 18, 2014

I have the same problem as aruld, on OS X Yosemite - not able to have 1.5 detected. This worked fine with Mavericks, but I assume Apple changed something again...

@jfougere
Copy link

For information, I struggled too with java in Yosemite. And I managed to get JDK 5 working by changing the lines below:

/usr/libexec/PlistBuddy -c "Set :JavaVM:JVMMaximumFrameworkVersion 14.*.*" ./Resources/Info.plist
/usr/libexec/PlistBuddy -c "Set :JavaVM:JVMMaximumSystemVersion "$osx_version".*" ./Resources/Info.plist

By :

/usr/libexec/PlistBuddy -c "Delete :JavaVM:JVMMaximumFrameworkVersion" ./Resources/Info.plist
/usr/libexec/PlistBuddy -c "Delete :JavaVM:JVMMaximumSystemVersion" ./Resources/Info.plist

@giorgiogamberini
Copy link

@jfougere you are a genius! That worked perfectly well in OSX 10.9.5 too, whilst I couldn't use JDK 1.5.0_30 otherwise 👍

@bneigher
Copy link

@jfougere This doesn't seem to be working entirely. When trying to execute a program with that java, I am getting:

Cannot run Java in 32 bit mode. Continuing in 64 bit mode.

followed by an exception. This whole thing was working before in Mavericks for me. Tried your suggested changes.

@jfougere
Copy link

@bneigher This message is normal for me because this install remove the 32 bit mode on the JDK 5 when installing if the system is recent one (from mountain lion).

I have the message too but then it works like a charm !

Are you sure your exception is related to JDK5 installation ?

@itsmesangeeth
Copy link

@jfougere Thanks your solution it works like a charm in Yosemite !! It will be better to update the script by owner

@pierrequere
Copy link

Hi ! I have tried the jfougere's solution on 10.10 Yosemite and my java application launches then quits immediately ! The system asks me to send a report to apple, and here is the principal error message that i can extract from a huge code that explains the problem (i didn't send it to apple) :

Dyld Error Message:
Symbol not found: _CGContextSetAllowsAcceleration
Referenced from: /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0_30/Libraries/libawt.jnilib
Expected in: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices

Can anybody help me to find a solution, please ? Thanks !

Copy link

ghost commented Nov 17, 2014

Hi,
Pierre do you find a solution, i've the exactly same problem :'(
Thanks

@nicolaferraro
Copy link

With the fix by jfougere, it works for me.

System: OS X 10.10.1 (14B25)
Kernel: Darwin 14.0.0

@sfcoy
Copy link

sfcoy commented Jan 21, 2015

The installer at http://support.apple.com/downloads/DL1359/en_US/JavaForMacOSX10.5Update10.dmg appears to contain a Java 6 implementation, as well as Java 5 it seems.

@Chewbee
Copy link

Chewbee commented Mar 16, 2015

Could I get please a little more details on jpfougere fix ;) ?
"Where" do you edit that plist ?
It is the one from the DMG ? the one of the pkg ?

many thanks

@asiriwork
Copy link

java -version gives this.
Cannot run Java in 32 bit mode. Continuing in 64 bit mode.
java version "1.5.0_30"

But still seems to use the java 1.7
Any solution?

@bric3
Copy link
Author

bric3 commented Aug 22, 2015

@asiriwork, make sure your JAVA_HOME is correctly set

@asiriwork
Copy link

This is not working with elcapitan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment