Blog

Helfen Sie JAVA, seinen Weg zu finden _HOME

Wilfred Springer

Aktualisiert Oktober 23, 2025
3 Minuten

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

Contact

Let’s discuss how we can support your journey.