In diesem Beitrag geht es um JAVA_HOME. (Ja, Sie haben richtig gelesen.) Ich hätte nie gedacht, dass ich jemals einen Beitrag über eine Umgebungsvariable schreiben würde, aber - hey - ich habe mir schon eine ganze Weile die Kinnlade runtergezogen, also dachte ich mir, dass es wahrscheinlich ein paar andere Leute gibt, die gerne etwas über die Lösung erfahren möchten.
Wohlgemerkt, das ist nur ein Problem für MacOS-Benutzer.
Ich mache jetzt eine Pause, damit die Leute jubeln und sich vor Lachen umdrehen können.
(Ich weiß, ich weiß, ich predige die Überlegenheit von Mac und Linux gegenüber Windows so lange ich mich erinnern kann...)
Wie dem auch sei, damit ist das Problem aus der Welt:
[source]
fringe:~ wilfred$ java -version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03-211)
Java HotSpot(TM) 64-Bit Server VM (build 11.3-b02-83, mixed mode)</pre>
fringe:~ wilfred$ mvn -version
Maven version: 2.0.9
Java version: 1.5.0_19
OS name: "mac os x" version: "10.5.7" arch: "i386" Familie: "unix"
fringe:~ wilfred$ echo $JAVA_HOME
[/source]
Können Sie mir sagen, was hier los ist? Als erstes führe ich 'java -version' aus und er sagt mir, dass die Version 1.6.0_irgendwas ist. Dann führe ich 'mvn -version' aus und er sagt mir, dass die Version von Java 1.5.0_irgendwas ist. Das ist ärgerlich. Eigentlich ist es sogar total bescheuert.
Die Idee ist, dass Sie auf dem Mac die Standardversionen von Java über eine Art Einstellungsfenster festlegen. Von da an würde alles einfach funktionieren. Egal, wie oft Sie zwischen den verschiedenen Versionen hin- und herspringen würden, es wäre alles in Ordnung. Das funktioniert jetzt aber offensichtlich nicht mehr. Es hat sich herausgestellt, dass die meisten Java-basierten Tools auf meinem System einen Fehler machen.
Bei näherer Betrachtung stellt sich heraus, dass dies das Problem ist:
[bash]
case "uname" in
CYGWIN) cygwin=true ;;
MINGW) mingw=true;;
Darwin*) darwin=true
if [ -z "$JAVA_VERSION" ] ; then
JAVA_VERSION="CurrentJDK"
else
echo "Using Java version: $JAVA_VERSION"
fi
if [ -z "$JAVA_HOME" ] ; then
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home
fi
;;
esac
[/bash]
Es hat sich herausgestellt, dass viele Skripte /System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home als Standard für JAVA_HOME verwenden, und es hat sich herausgestellt, dass dies nicht mehr der Ort ist, an dem sich Ihr aktuelles, über die Einstellungen festgelegtes JDK befindet.
Sie müssen also JAVA_HOME manuell festlegen. Aber wie machen Sie das, wenn Sie wollen, dass es mit dem in Ihren Einstellungen gewählten JDK übereinstimmt? Es scheint keinen einfachen Ausweg zu geben.
Die Lösung ist eigentlich recht einfach, aber auch recht gut versteckt. Seit Java für Mac OS X v10.5 Update 4 gibt es ein neues Tool in '/usr/libexec' namens 'java_home'. Und raten Sie mal: Es gibt standardmäßig den Speicherort der aktuellen Java-Version zurück, den Sie in den Einstellungen festgelegt haben.
Die Lösung des oben beschriebenen Problems ist ziemlich einfach. Sie setzen einfach JAVA_HOME auf die Ausgabe dieses Befehls in Ihrer Profildatei und alles funktioniert wie am Schnürchen:
[bash]
fringe:~ wilfred$ export JAVA_HOME=/usr/libexec/java_home
fringe:~ wilfred$ mvn -version
Maven Version: 2.0.9
Java Version: 1.6.0_13
OS Name: "mac os x" Version: "10.5.7" arch: "x86_64" Familie: "mac"
[/bash]
Das Interessante daran ist: java_home akzeptiert auch eine ganze Reihe von Kommandozeilenoptionen. Anstatt also zu sagen, dass Sie die Version von Java oben im Einstellungsfenster aufgelistet haben möchten, können Sie es tatsächlich dazu bringen, eine 64-Bit-Version, eine Version in einem bestimmten Versionsbereich oder eine Version, die eine bestimmte Aufgabe unterstützt, auszuwählen. Ich denke, das ist ziemlich gut. Was sagen Sie dazu?
Verfasst von

Wilfred Springer
Unsere Ideen
Weitere Blogs
Contact



