Tomcat a besoin que la variable d’environnement JAVA_HOME soit défini. Elle l'est par défaut mais elle pointe sur une version antérieure du JRE, de ce fait, les Servlets sont compilé avec la version 1.7.0 alors qu'elles sont exécutées avec la version 1.6..
Du coup, une belle erreur qui pique la crane et qui fait perdre une journée de boulot :
ClassName : Unsupported major.minor version 51.0 (unable to load class ClassName)
exception
java.lang.UnsupportedClassVersionError: ClassName : Unsupported major.minor version 51.0 (unable to load class ClassName)
Pour regler le problème, stackoverflow propose de définir JAVA_HOME avec un script fourni dans OS X (/usr/libexec/java_home étant un lien symbolique) :
export JAVA_HOME=$(/usr/libexec/java_home)
Le problème c'est que cette appel shell n'échappe pas les espaces, ce qui donne un path erroné.
/usr/local/bin/catalina: line 439: /Library/Java/JavaVirtualMachines/JDK/bin/java: No such file or directory
Il faut donc faire le boulot à la place du script :
$ cd /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/
$ ./java_home
/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/Home
$ export $JAVA_HOME="/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/Home"
Relancer Tomcat et tout est good :)