jaka jest przyczyna istnienia zmiennej środowiskowej JAVA_HOME?

94

Wiele aplikacji opartych na Javie wymaga ustawienia zmiennej env JAVA_HOME. Jaki jest cel tej zmiennej?

user496949
źródło
5
możesz przeczytać tutaj
Sergey Vedernikov
2
Uważam, że pytanie nie ma jeszcze odpowiedzi. Jeśli chodzi o uruchamianie javy, nie jest konieczne posiadanie tej zmiennej, jeśli masz folder z plikiem binarnym w ścieżce. Wszystkie odpowiedzi wskazują na oczywiste: „Gdzie zainstalowano java”. Ale dlaczego: jakie jest znaczenie uruchamiania aplikacji Java?
Wolf
7
pomimo tych wszystkich komentarzy i odpowiedzi nie widzę żadnego powodu, aby ustawić tę zmienną środowiskową. Bez uzasadnienia. Przyszedłem tutaj, próbując ustawić to za pomocą wsdl2java. Gdybym nie używał tego narzędzia, zmienna env nie jest potrzebna ... pozornie po prostu niektóre narzędzia używają tej zmiennej. ale dlaczego?
Thufir
@Thufir - nie widziałem jednak nigdzie wyraźnie podanego powodu . - JAVA_HOME to tylko konwencja. Nie ma to żadnego specjalnego znaczenia poza tym, że wszyscy zgodzili się go używać. AFAIK - Jedynym zastosowaniem, które widzę, jest to, że daje narzędziom możliwość rozróżnienia między JRE, który jest zwykle ustawiany w zmiennej PATH, a JDK. Zwykle JAVE_HOME jest ustawiony na JDK. - To jest wyraźne. Nie ma zajmowania się kolejnością katalogów, jak w przypadku PATH, gdzie może być wiele miejsc do znalezienia java exe.
Rohan

Odpowiedzi:

22

Zmienne środowiskowe to ciągi zawierające informacje, takie jak dysk, ścieżka lub nazwa pliku.

W zmiennej środowiskowej JAVA_HOME wskazuje katalog, gdzie środowisko wykonawcze Java (JRE) jest zainstalowany na komputerze.

kamaci
źródło
40
Jedna poprawka: JAVA_HOME powinno wskazywać na JDK, a nie JRE. Wiele aplikacji nie przejmuje się różnicą, ale dla niektórych jest ona znacząca.
Chris Nava,
4
W JDK dostępny jest również folder JRE. Dlatego za pomocą JAVA_HOME aplikacja może zlokalizować zarówno JDK, jak i JRE.
łotr,
@ChrisNava: Wydaje się, że wskazanie JAVA_HOME na instalację JRE jest poprawne w niektórych przypadkach (chyba większość przypadków niezwiązanych z programowaniem): stackoverflow.com/questions/17601827/… . Więc powiedzenie „powinienem” to za dużo.
cic
18

Celem jest wskazanie, gdzie jest zainstalowana Java. $JAVA_HOME/bin/javapowinien uruchamiać środowisko wykonawcze Java.

Haakon
źródło
4
Ale to głupie, ponieważ w ścieżce powinna znajdować się java, a plik binarny może zlokalizować się i otworzyć inne pliki, używając ścieżki względnej.
LtWorf
3
Jest to przydatne, gdy java nie znajduje się w $ PATH, na przykład gdy masz wiele instalacji SDK.
Haakon
Pierwszym argumentem pliku binarnego jest pełna nazwa samego pliku wykonywalnego, java nie musi znajdować się w ścieżce, aby znaleźć własny katalog.
LtWorf
@Haakon Jako ktoś, kto próbuje skonfigurować wiele JDK, dlaczego nie chcesz, aby java na ścieżce? W jaki sposób system Windows lokalizuje java z java_home? Myślałem, że ścieżka została mniej więcej zdefiniowana jako „lista miejsc, w których system operacyjny będzie szukał plików wykonywalnych”.
LastStar007
7

Kiedy uruchamiasz program w języku Java, musisz najpierw uruchomić maszynę JVM, zwykle odbywa się to poprzez uruchomienie pliku wykonywalnego, w systemie Windows jest to java.exe . Możesz to uzyskać na wiele sposobów, na przykład po prostu podając pełną ścieżkę:

C:\somedir\bin\java.exe

lub może mieć to na swojej ścieżce.

Jako argumenty wiersza poleceń podajesz niektóre pliki klas lub pliki JAR zawierające pliki klas, które są twoim programem. Ale to nie wystarczy, sam java.exe potrzebuje różnych innych zasobów, nie tylko wszystkich bibliotek Java. Ustawiając zmienną środowiskową JAVA_HOME, określasz, gdzie ma się znaleźć środowisko JRE, a tym samym wszystkie te zasoby wykonawcze. Powinieneś upewnić się, że konkretna uruchamiana Java jest zgodna z ustawieniem JAVA_HOME.

Może być również konieczne JAVA_HOME\binwczesne wstawienie ścieżki, tak aby w przypadku java.exezrobienia sobie kopii (na przykład w celu skompilowania strony JSP) odebrał właściwą wersję.

djna
źródło
6

Według @dirai tutaj JAVA_HOMEnie jest używany przez samą Javę, ale przez niektóre narzędzia innych firm, takie jak na przykład Apache Tomcat. Jednak większość aplikacji będzie działać bez ustawienia tej zmiennej, ale niektóre mogą wykazywać nieoczekiwane zachowanie.

karlsebal
źródło
5

JAVA_HOMEjest zmienną środowiskową .

Musi być skonfigurowany w innym systemie operacyjnym. Sprawdź poniższe linki.

Zobacz także tutaj, aby uzyskać więcej informacji.

sgokhales
źródło
1
Masz do environmentczynienia z pathróżnymi rzeczami, ale używanymi w systemie Windows dokładnie tak samo, jak w Linuksie.
Val
1
@val tylko wskazuje, że od tego czasu zostało to poprawione w jego odpowiedzi.
barlop
Wystarczy dodać do listy JAVA_HOME w systemie Windows 10
filip_j
3

JAVA_HOMEpozwala na uruchomienie dowolnej z wielu instalacji Java. Nawet jeśli najpierw masz /usr/lib/jvm/java-1.8.0/bin/java PATH w swojej ścieżce, dobrze jest móc powiedzieć JAVA_HOME=/usr/lib/jvm/java-1.5.0i mieć domyślną "java", z którą uruchamiasz programy, zamiast tego użyj drugiej, jako kwestii ustawienia środowiska. Pozwala to programiście na użycie potrzebnej im wersji Java, nawet jeśli nie jest ona zainstalowana w normalnej lokalizacji systemu, i przetestowanie lub zapewnienie zgodności wstecznej z tą alternatywną wersją. I nie jest podatny na resetowanie w PATH przez inny zainstalowany program, na przykład główną aktualizację wersji samej javy.

Nico Kadel-Garcia
źródło