Anwendung verwendet Java 6 von Apple anstelle von Java 7 von Oracle unter Mac OS X?
Ich Teste meine aktuelle Anwendung mit Mac OS X ist Java 7 von Oracle installiert. Anstelle der Verwendung von Java 7 von Oracle, das mit Java 6 von Apple. Die Standard-system-Ausgabe von java -version
zeigt 7
.
Habe ich versucht die meisten Dinge, die in verschiedenen Websites, aber ich war nicht in der Lage dieses Problem zu beheben.
JAVA_HOME
ist auch richtig eingestellt.
Ich benutze den Mac nur für Testzwecke. Ich brauche wirklich eine Anleitung für diese.
Wenn ich es mit Eclipse durch Auswahl JRE 7 einwandfrei läuft. So gibt es nichts falsch mit der Anwendung. Bin ich etwas fehlt auf Mac OS X.
Mein Java-system-Umgebung sieht wie folgt aus:
- OS X version
10.8
/usr/libexec/java_home -V
Matching Java Virtual Machines (3): 1.7.0_12, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk 1.6.0_37-b06-434, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 1.6.0_37-b06-434, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home
/usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home/
JAVA_ARCH
ist nicht festgelegt/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version
java version "1.7.0_12-ea"
ls /Library/Java/JavaVirtualMachines
jdk1.7.0_12.jdk
/System/Library/Frameworks/JavaVM.framework/Commands/java -version
java version "1.6.0_37"
Ich denke, meine aktuelle JDK verweist auf etwas falsch.
InformationsquelleAutor der Frage amod | 2013-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem
Ihrem Mac OS X application bundle erstellt wurde, eine app, mit der bundler, die nicht kompatibel mit Oracle ' s Java 7 Paket. Das Bundle, das Sie verwenden könnte, zum Beispiel
Jar Bundler
bieten von Apple, das funktioniert nur für Apple ' s Java-6-System-Pakete.Apple hat die Unterstützung für Java als integrierte System-Pakete von Java 7 und höher. Als eine Konsequenz, die Sie haben zu gehen für die Oracle-Java-7 Third-Party-Paket und Ihre Anwendung Paket-bundle-Lösung. Dies ermöglicht Ihnen zum erstellen und bereitstellen von Oracle-Java-7-basierten Anwendungs-bundles unter Mac OS X 10.7.3 und höher.
Die zugrunde liegende technische Problem, das Sie konfrontiert sind, ist apples native
Objective-C
basiertJavaAppLauncher
binäre und das format verwendet es inInfo.plist
funktioniert nur mit Apple Java 6 System-Pakete und dieJavaAppLauncher
Info.plist
Kombination aus Oracle ist nur für Oracle Java-7-Pakete.Wie Sie mit Hilfe eines
JavaAppLauncher
Unterstützung von apples Java 6 System-Pakete aus, es wird immer abholen das Apple Java 6 System-Paket auf dem Mac installiert.Es ist ein video, wo Scott Kovatch, der leitende Ingenieur für die Mac OS X Portierung der Java-Plattform bei Oracle, spricht auf der DEVOXX darüber, wie app-Bündelung für Oracle-Java-7 ist die Arbeit im detail.
Lösung
Erstellen, app-bundles für Mac OS X 10.7.3 und höher, basierend auf
und höher ist, ist der Einsatz von Oracle ' s app bundler
lib/appbundler-1.0.jar
mit den Ant-Taskcom.oracle.appbundler.AppBundlerTask
Mit Oracle app bundler Sie haben nun die Wahl, die Ausführung Ihrer packaged app mit der Standard-Oracle-Java-7-Paket auf Ihrem Mac installiert ist hier:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/
oder die Oracle-Java-7-JRE, die Sie inline in Ihre Anwendungssoftware
MyJavaMacOSXApp.app/Contents/PlugIns/
Hinweis: Es gibt vor-und Nachteile für beide Ansätze, aber Sie müssen in der letzten Sie Ihre eigene JRE, wenn Sie wollen, gehen Sie zu dem App Store von Apple mit Ihrem app gebündelt.
, Was getan werden muss
appbundler-1.0.jar
und verschieben Sie es an<project>/lib/appbundler-1.0.jar
Fügen Sie den folgenden, um Ihre
<project>/build.xml
Hinweis: Sie müssen Sie zu ersetzen
MyJavaMacOSXApp
mit Ihrer Anwendung Daten. Finden Sie hier einige zusätzlicheAppBundlerTask
Optionen, wie dieses Beispiel zeigt nur, wie, wie es funktioniert in Ihrer einfachsten form.Führen Sie nach der
bundle
Ziel mitant bundle
finden SieMyJavaMacOSXApp.app
im<project>/dist
Verzeichnis.Was bedeutet die
<runtime dir="${env.JAVA_HOME}" />
element?Inlining von Oracle Java 7 Package (JRE)
Dem Ant-target über Kopien der Oracle-Java-7-Paket (JRE) von Ihrem
JAVA_HOME
in
MyJavaMacOSXApp.app/Contents/PlugIns
So dass das Programm-Paket ist völlig eigenständig und muss nicht eine Oracle-Java-7-Paket (JRE) installiert auf dem Ziel-system überhaupt. Wie Sie sehen können, in den folgenden screenshots von solchen bereitgestellt
MyJavaMacOSXApp.app
:Verdrahtung Standard-Oracle-Java-7-Paket (JRE)
Wenn Sie möchten, verwenden Sie die Standard-Oracle-Java-7-Paket (JRE) installiert auf dem Ziel-Mac application bundle unter
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/
müssen Sie die
<runtime dir="${env.JAVA_HOME}" />
element aus der
bundle
Aufgabe. Wie Sie sehen können, in den folgenden screenshots von solchen bereitgestelltMyJavaMacOSXApp.app
:Quelle
MyJavaMacOSXApp.java
Was ist, wenn meine app hat mehrere jar-Dateien?
Fügen Sie einfach so viele
<classpath file="dist/additional.jar" />
Einträge, wie Sie benötigen.Hinweis: Die Reihenfolge der Elemente in der bundle-task bleibt nicht erhalten bei Laufzeit Ihres app gebündelt. Die
java.class.path
gebaut wird, bis zur Laufzeit von der nativenJavaAppLauncher
wie es liest in der*.jar
s ausMyJavaMacOSXApp.app/Contents/Java
Verzeichnis.Nur der Vollständigkeit halber, dies ist, wie
Info.plist
aussieht:Wichtige Dokumente diese Antwort basiert auf:
Gibt es auch eine gut erhaltene Gabel von appbundler selbst, mit viel mehr features und bugfixes.
InformationsquelleAutor der Antwort Uwe Günther
Den Java-version benötigt die app ist wahrscheinlich in der Anwendung angegebenen Metadaten. Wenn Sie mit der rechten Maustaste auf die app und wählen Sie Paketinhalt Zeigen und navigieren Sie zu der
Info.plist
- Datei, finden Sie Einträge, die definieren die JVM, die die Anwendung verwenden wird. E. g.OSX können wählen, verwenden Sie eine niedrigere JVM, wenn die Anwendung anfordert.
InformationsquelleAutor der Antwort Armand
Ihrem system ist nicht wirklich up to date. Ich sage dies nicht die Ursache Ihres Problem. Aber nur um auf der sicheren Seite ich würde die Rolle nach vorne, um die neuesten und größten.
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk
. Hinweis: Das ist sicher, weil im nächsten Schritt installieren wir die aktuelle Oracle-JDK 1.7.0_17.Nachdem Sie abgeschlossen haben alle Schritte von oben, bitte, kommen Sie mit der folgenden Ausgabe wieder:
/usr/libexec/java_home -V
?/usr/libexec/java_home
?echo $JAVA_HOME
aus?echo $JAVA_ARCH
aus?/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version
aus?ls /Library/Java/JavaVirtualMachines
?/System/Library/Frameworks/JavaVM.framework/Commands/java -version
?Dokument nur die Schritte und die Mühe, die Sie haben in Ihrer ursprünglichen Frage. Also es spiegelt Ihren Fortschritt.
UPDATE: Die Lösung ist das erstellen einer Mac OS X-application-bundle mit Orakel
AppBundlerTask
. Für details siehe meine andere Antwort hier: https://stackoverflow.com/a/15271448InformationsquelleAutor der Antwort Uwe Günther
EDIT: Uwe, die eindrucksvolle Antwort ist absolut richtig für die OP, es stellt sich heraus, war mit der AppLauncher. Meine ersten Lesen der Frage war, dass es mit command-line-Probleme auf OSX mit Java 6 vs Java 7. Die Kommentare auf die ursprüngliche Frage zeigen, dass ich falsch war. Allerdings, jemand, der über command-line Fragen können finden Sie unten eine einfachere Lösung.
ORIGINAL:
Meine Umstände sind anscheinend die gleichen wie ich dachte, dass die OP hatte: Java 1.7 perfekt auf der command-line, aber
mvn
Versagen und beklagen 1.6, Allgemeine Zusammenstellung gearbeitet hatte, gut mitsbt
und IntelliJ. Ich nur begann, die Probleme kompilieren eines Dritten Projekt mitmvn
.Fand ich diese arbeiten gut und viel einfacher:
http://www.jayway.com/2013/03/08/configuring-maven-to-use-java-7-on-mac-os-x/
Alle, die ich brauchte, war die folgende .Profil:
Festgelegt, dass variable und
mvn
gut funktioniert.InformationsquelleAutor der Antwort Andrew E
Versuchen, die Installation dieses:
http://support.apple.com/kb/dl1572
InteliJ funktioniert Prima, während ich bin immer noch auf Java SE 7 zum Beispiel NetBeans.
InformationsquelleAutor der Antwort candylady