2013-03-25 21 views
53

OK, jestem trochę nowa w systemach Mac i OSX, ale wybrałem jedną z nich, aby rozwiązać niektóre problemy z programami Java, ponieważ firma, w której pracuję używa kombinacji Komputery OSX i Windows. Problem, z którym się borykam, polega na tym, że kiedy instaluję Java 7 ze strony Oracle, aktualizuje ona menu preferencji i wydaje się poprawnie wykonywać pliki .jar po dwukrotnym kliknięciu, ale wersja okna terminala nadal 1.6.0_43 i działa ten sam plik .jar z terminala powoduje błędy w czasie wykonywania ze względu na starszą wersję.Niepoprawna wersja terminala Java w systemie Mac OSX

Po przejściu do katalogu/Library/Java/JavaVirtualMachines/Wyświetlany jest pusty folder. Z tego, co widziałem w innych artykułach, wynika, że ​​powinien to być folder wersji Java 1.7.0. Masz pojęcie, co się dzieje? Jak mogę uzyskać, aby terminal korzystał z poprawnej wersji Java?

Edit: @DWilches komentować swojej oryginalnej odpowiedzi: (1)

total 64 
lrwxr-xr-x 1 root wheel 10 Mar 17 21:38 1.4 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 17 21:38 1.4.2 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 17 21:38 1.5 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 17 21:38 1.5.0 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 17 21:38 1.6 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 17 21:38 1.6.0 -> CurrentJDK 
drwxr-xr-x 8 root wheel 272 Mar 17 21:38 A 
lrwxr-xr-x 1 root wheel 1 Mar 17 21:38 Current -> A 
lrwxr-xr-x 1 root wheel 59 Mar 17 21:38 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents 

(2)

ls -ld /usr/bin/java 
lrwxr-xr-x 1 root wheel 74 Mar 17 21:38 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java 

EDIT: Przepraszam za pomyłkę z nową odpowiedź, dostał też wykorzystywane do strony, które blokują edycje oryginalnego postu po tak długim czasie ...

+2

integracja Java na Mac OSX jest rujnujący atm bałagan, co z jabłkiem zaprzestanie oficjalnego wsparcia i Oracle naprawdę nie wiedząc, czy dbanie jak prawidłowo zintegrować. Jeśli nie można znaleźć Java 7 w/Library/Java/JavaVirtualMachines potem spojrzeć w /System/Library/Frameworks/JavaVM.framework/Versions. * * To powinno być tam, jako katalog samodzielny lub powiązanych z 'Current'. – Perception

+1

To jest proste - kod Apple i tylko kod Apple jest w/System, strona trzecia dla wszystkich użytkowników znajduje się w/Library – Mark

+0

@DGolberg - jaka dokładnie Java zainstalowałeś Oracle zapewnia środowisko JRE i JDK – Mark

Odpowiedz

101

JDK

W systemie Mac OS, /usr/bin/java i przyjaciółmi są odcinki, które przekazywać komendy prawdziwy JDK. Te odcinki respektować ustawienie zmiennej środowiskowej JAVA_HOME, ale za to do pracy trzeba zainstalować JDK (od http://www.oracle.com/technetwork/java/javase/downloads/index.html), w przeciwieństwie do JRE (od http://java.com).

JDK instaluje się /Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk (niezależnie od wartości NN), tak ustawić zmienną środowiskową do /Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk/Contents/HomeJAVA_HOME aby /usr/bin/java wykorzystanie 1.7. Możesz przełączyć się z powrotem do 1,6 po prostu wskazując swój JAVA_HOME do /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home zamiast. Można użyć narzędzia /usr/libexec/java_home znaleźć właściwą wartość automatycznie, na przykład, aby /usr/bin/java użycie Java 7 można zrobić

export JAVA_HOME=`/usr/libexec/java_home -v '1.7*'` 

i aby go używać Java 6 można zrobić

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'` 

To samo dotyczy Java 8 (przy użyciu -v '1.8*'). Pozwoli to podnieść najnowszy zainstalowany JDK dla odpowiedniej wersji głównej, nie trzeba pamiętać, aby zmienić NN ręcznie po zainstalowaniu aktualizacji.

JRE

Jeśli chcesz uruchomić 1.7 lub 1.8 JRE z wiersza poleceń, można je znaleźć w /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java. Jest to stała droga i można mieć tylko jedną „publiczne” JRE zainstalowane w danym momencie.

$ /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version 
java version "1.7.0_13" 
Java(TM) SE Runtime Environment (build 1.7.0_13-b20) 
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode) 

Można użyć aliasu powłoki w swojej .bashrc

alias java_jre='/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java' 
+3

Rozwiązuje to mój ból głowy, jak sprawić, by terminal korzystał z Javy 1.7. Wielkie dzięki Ian! – vichsu

+0

Jakiś dziwny powód, dla którego nie otrzymałem ostrzeżenia, gdy opublikowałeś wiadomość (lub mogłem sprawdzić inny i go przegapiłem). Próbowałem tego i wydaje mi się, że działa tak daleko także dla mnie. Dzięki Ian! – DGolberg

+0

Wreszcie znalazłem dobrą odpowiedź na temat JRE na Macu. – Nakilon

5

Po pierwsze, czy zrezygnowałeś z konsoli i otworzyłeś ją ponownie, aby mieć szanse na zmianę w zmiennej PATH?

Jeśli już to zrobione, a następnie sprawdzić, które domyślną wersję swojej Java jest:

[email protected] ~$ cd /System/Library/Frameworks/JavaVM.framework/Versions/ 
[email protected] Versions$ ls -l 
lrwxr-xr-x 1 root wheel 59 Mar 19 10:07 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents 
lrwxr-xr-x 1 root wheel 10 Mar 19 10:07 1.6.0 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 19 10:07 1.6 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 19 10:07 1.5.0 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 19 10:07 1.5 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 19 10:07 1.4.2 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Mar 19 10:07 1.4 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 1 Mar 19 10:08 Current -> A 
drwxr-xr-x 8 root wheel 272 Mar 25 10:03 A 

Teraz widać, że „Current” wersja „A” (to moja Java7) . Jeśli chciałbym zmienić go na Java 1.6 wtedy mógłbym napisać:

[email protected] Versions$ sudo unlink Current 
[email protected] Versions$ sudo ln -s 1.6 Current 

, a następnie:

[email protected] Versions$ java -version 
java version "1.6.0_43" 
Java(TM) SE Runtime Environment (build 1.6.0_43-b01-447-11M4203) 
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01-447, mixed mode) 

Więc można to wykorzystać, aby zrobić "bieżąca" punkt do żądanej lokalizacji Java.

+0

Tak, nawet zrestartował cały system; wciąż mówi, że jest to wersja 1.6.0_43 – DGolberg

+0

możesz opublikować wyniki tych 3: (1) ls -l /System/Library/Frameworks/JavaVM.framework/Versions/ (2) whereis java (3) ls -ld/usr/bin/java – MondKin

+0

zaktualizowany oryginalny post ... zapomniałem edytować oryginał na tej stronie. – DGolberg

9

Problem polega na tym, że instalacja JRE Oracle nie zmienia pliku wykonywalnego/usr/bin/java. Jeśli chcesz korzystać z tej Java trzeba użyć ścieżki w/Library (trzeba znaleźć co to mam JDK zainstalować tak może być inny)

Zgodnie Oracle JRE installation document

Instalowanie JRE z Oracle nie aktualizuje dowiązań symbolicznych java -version ani dodaj java do swojej ścieżki. Aby to zrobić, musisz zainstalować JDK.

Oracle JDK nie zmienia /usr/bin/java aby wskazywał Java 7 wykonywalnego. Jeśli tworzysz program, powinieneś go użyć, ponieważ zawiera on więcej niż środowisko JRE.

Wyrocznia install FAQ mówi

Q: Czy mogę zainstalować JRE lub JDK?

A: Jeśli planujesz uruchamiać aplikacje Java, zainstaluj środowisko wykonawcze Java Środowisko (JRE). Środowisko JRE jest również określane jako Oracle Java. Po zainstalowaniu środowiska JRE można uruchomić aplety Java i aplikacje , klikając dwukrotnie pliki JAR, pliki JNLP i przeglądarkę . Zwróć uwagę, że środowisko JRE nie obsługuje 32-bitowych przeglądarek, takich jak Firefox w trybie 32-bitowym, i Chrome.

Jeśli planujesz pisać aplikacje Java, zainstaluj Java Development Kit (JDK).

+0

Zajmuję się moim rozwojem na moim komputerze z systemem Windows, gdzie jest mniej dla mnie ból głowy. Komputer Mac jest obecnie skonfigurowany tylko do wyszukiwania problemów. Na przykład, jeden z użytkowników mojego programu mógłby uruchomić program (aplikację typu "swing"), ale jakiś kod dla shutdownhook nie był wykonywany, dopóki nie zainstalował JDK; Próbuję dowiedzieć się, dlaczego na tej platformie testowej, ale JRE w terminalu jest niepoprawny, więc błąd nawet przed dotarciem do tego punktu ze względu na różnicę wersji między maszyną programistyczną a maszyną testową (gdy jest uruchamiany z terminala) . – DGolberg

+0

Zainstalowałem JDK, ale nie zmieniło to mojej ścieżki. Używanie OSX 10.9.1 – Deepend

+0

Nie zmienia ścieżki, tylko aktualizuje to, co/usr/bin/java uruchamia – Mark

-1

Podobnie jak Ian powiedział, ale prawdopodobnie chcesz java7 należne od .sh skryptu, więc trzeba funkcję zamiast alias dodany do bash_profile:

java7() { 
    /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java "[email protected]" 
} 
export -f java7 
Powiązane problemy