Wiele wersji Java działających jednocześnie w systemie Windows

84

Mamy kilka aplikacji działających w Javie 5 i chcielibyśmy teraz udostępnić aplikację opartą na Javie 6. Czy obie wersje Java mogą funkcjonować razem w systemie Windows?

Czy istnieje panel sterowania służący do ustawiania odpowiedniej wersji języka Java dla różnych aplikacji lub w inny sposób konfigurowania wersji języka Java, która będzie używana do uruchamiania tej konkretnej aplikacji?

Daniel Stanca
źródło

Odpowiedzi:

60

Oczywiście możesz używać wielu wersji Java w systemie Windows. Różne aplikacje mogą korzystać z różnych wersji Java. Jak rozpoczęła się Twoja aplikacja? Zwykle będziesz mieć plik wsadowy, w którym jest coś takiego

java ...

Spowoduje to przeszukanie pliku wykonywalnego Java przy użyciu zmiennej PATH. Jeśli więc Java 5 jest pierwsza w PATH, będziesz mieć problemy z uruchomieniem aplikacji Java 6. Następnie należy zmodyfikować plik wsadowy, aby używał określonej wersji Javy, np. Definiując zmienną środowiskową JAVA6HOMEz wartością C:\java\java6(jeśli Java 6 jest zainstalowana w tym katalogu) i zmienić wywołanie pliku wsadowego

%JAVA6HOME%\bin\java ...
naprawdę głupi
źródło
9
W systemie Windows, aby uniemożliwić instalatorowi Java zastąpienie istniejącej (pierwszej zainstalowanej) instalacji Java, należy przekazać jej argument STATIC = 1, tj. Uruchomić z wiersza poleceń „jre-6u24-windows-i586-s.exe / STATIC = 1”
Tom Chiverton
4
Kiedy wykonuję „jdk-6u27-windows-x64.exe / STATIC = 1” w systemie Windows 7 64, program nie instaluje się, po prostu wyświetla wyskakujące okienko pokazujące użycie msiexec.
yetimoner,
7
Zgodnie z tym dokumentem Oracle tak naprawdę jest jdk-...exe STATIC=1. Spróbowałem tego i zadziałało.
Matt
1
Chłopaki, mylicie JDK i JRE. JRE traktuje STATICjako argument, ale czy JDK też?
Danijel
1
@reallyinsane Nie mogę tego zrozumieć. Odpowiedź nie jest uproszczona dla początkującego. Czy możesz połączyć mnie z pełnym samouczkiem?
ar plusplus
12

Jest absolutnie możliwe zainstalowanie obok siebie kilku wersji JRE / JDK. Co więcej, nie musisz robić nic specjalnego, aby tak się stało, ponieważ Sun tworzy dla każdego inny folder (w Program Files).

Nie ma panelu sterowania do sprawdzania, które środowisko JRE działa dla każdej aplikacji. Zasadniczo środowisko JRE, które będzie działać, będzie pierwszym w zmiennej środowiskowej PATH. Możesz to zmienić lub zmienną JAVA_HOME lub utworzyć określone pliki cmd / bat, aby uruchomić żądane aplikacje, każda z innym środowiskiem JRE w ścieżce.

Mosze
źródło
2
Nie wierzę, że to prawda w przypadku systemu Windows.
cmcginty
@Casey, do której części się odnosisz? Dlaczego to nieprawda?
Pacerier,
1
Ta odpowiedź wyjaśnia problem. Rejestr systemu Windows służy do lokalizowania domyślnej wersji języka Java.
podłoże binarne
Chociaż często prawdą jest, że program w języku Java będzie działał dobrze na nowej wersji Javy niż ta, w której został opracowany, nie ma gwarancji. W większości przypadków należy również zaktualizować zmienną środowiskową JAVA_HOME.
Patrick O'Hara,
11

Byłem zbulwersowany niezdarnością pomysłów CLASSPATH, JAVA_HOME i PATH w systemie Windows, aby śledzić pliki Java. Dotarłem tutaj z powodu wielu środowisk JRE i tego, jak się z tego zadowolić. Bez zwracania informacji, od faceta dużo mądrzejszego ode mnie, wskazałbym raczej na jego artykuł na ten temat, który jak dla mnie rozwiązuje to doskonale.

Artykuł autorstwa: Ted Neward: Multiple Java Homes: Giving Java Apps their own JRE

Wraz z wykładniczym rozwojem języka Java jako języka programowania po stronie serwera nastąpił równoważny wykładniczy wzrost liczby narzędzi programistycznych, środowisk, struktur i rozszerzeń języka Java. Niestety, nie wszystkie te narzędzia dobrze ze sobą współpracują w ramach tej samej instalacji maszyny wirtualnej Java. Niektóre wymagają środowiska zgodnego z Servlet 2.1, inne wymagają 2.2. Niektóre działają tylko pod JDK 1.2 lub nowszym, inne pod JDK 1.1 (i nie wyżej). Niektóre wymagają pakietów „com.sun.swing” sprzed wersji Swing 1.0 dni, inne wymagają nazw pakietów „javax.swing”.

Co gorsza, problem ten można znaleźć nawet w korporacyjnym przedsiębiorstwie, ponieważ systemy opracowane przy użyciu języka Java sprzed zaledwie sześciu miesięcy mogą nagle „przestać działać” z powodu instalacji rozszerzenia Java wymaganego przez nową (pozornie niepowiązaną) wersję aplikacji. Może to skomplikować wdrażanie aplikacji Java w całej korporacji i sprawić, że klienci zaczną się zastanawiać, dlaczego pięć lat po rozpoczęciu niesławnych problemów związanych z instalacją tej aplikacji psuje mój system, które zaczęły się od schematów DLL firmy Microsoft, wciąż nie mamy nie posunął się znacznie dalej. (W rzeczywistości nowa inicjatywa .NET stara się rozwiązać niesławny problem „piekła DLL”, który właśnie opisano).

W tym artykule opisano, jak skonfigurować instalację Javy tak, aby dana aplikacja otrzymywała własne, prywatne środowisko JRE, pozwalające na współistnienie wielu środowisk Java bez doprowadzania klientów (lub administratorów systemu) do szaleństwa ...

Drikus
źródło
8
Myślę, że link podany w powyższej odpowiedzi już nie istnieje, znalazłem ten sam artykuł tutaj docplayer.net/…
Alok Mishra
4

Powinna istnieć możliwość zmiany ustawienia zmiennej środowiskowej JAVA_HOME w inny sposób dla określonych aplikacji.

Uruchamiając z wiersza poleceń lub ze skryptu wsadowego można set JAVA_HOME=C:\...\j2dskXXXzmienić środowisko JAVA_HOME.

Możliwe, że musisz również zmienić PATHzmienną środowiskową, aby używała poprawnego pliku binarnego Java. Aby to zrobić, możesz użyć set PATH=%JAVA_HOME%\bin;%PATH%.

Ruben
źródło
4

Możemy zainstalować wiele wersji zestawów deweloperskich Java na tej samej maszynie za pomocą SDKMan.

Niektóre punkty dotyczące SDKMan są następujące:

  1. SDKMan jest darmowy i jest rozwijany przez społeczność open source.
  2. SDKMan jest napisany w bashu i wymaga jedynie obecności w systemie programów curl i zip / unzip .
  3. SDKMan może zainstalować około 29 zestawów programistycznych dla JVM, takich jak Java, Groovy, Scala, Kotlin i Ceylon. Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
  4. Nie musimy martwić się ustawieniem zmiennych środowiskowych _HOMEi, PATHponieważ SDKMan obsługuje to automatycznie.

SDKMan może działać na dowolnej platformie UNIX, takiej jak Mac OSX, Linux, Cygwin, Solaris i FreeBSD i możemy go zainstalować za pomocą następujących poleceń:

$ curl -s "https://get.sdkman.io" | bash  
$ source "$HOME/.sdkman/bin/sdkman-init.sh" 

Ponieważ SDKMan jest napisany w bashu i wymaga tylko curl i zip / unzip, aby były obecne w twoim systemie. Możesz również zainstalować SDKMan w systemie Windows, instalując najpierw środowisko Cygwin lub Git Bash dla Windows, a następnie uruchamiając powyższe polecenia.

Polecenie sdk list javapoda nam listę wersji java, które możemy zainstalować za pomocą SDKMan.

Instalowanie Java 8

$ sdk install java 8.0.201-oracle

Instalowanie Java 9

$ sdk install java 9.0.4-open 

Instalowanie Java 11

$ sdk install java 11.0.2-open

Odinstalowanie wersji Java

Jeśli chcesz odinstalować dowolną wersję JDK, np. 11.0.2-open, możesz to zrobić w następujący sposób:

$ sdk uninstall java 11.0.2-open

Przełączanie aktualnej wersji Java

Jeśli chcesz aktywować jedną wersję JDK dla wszystkich terminali i aplikacji, możesz użyć polecenia

sdk default java <your-java_version>

Powyższe polecenia automatycznie zaktualizują również zmienne PATH i JAVA_HOME. Możesz przeczytać więcej w moim artykule Jak zainstalować wiele wersji Java na tym samym komputerze .

Naresh Joshi
źródło
1
to jest dla użytkowników innych niż Windows.
gumuruh
@gumuruh Możesz go również zainstalować w systemie Windows, ponieważ SDKMan jest napisany w bashu i wymaga tylko curl i zip / unzip, aby były obecne w twoim systemie. Możesz zainstalować SDKMan również w systemie Windows, najpierw instalując środowisko Cygwin lub Git Bash dla Windows, a następnie uruchamiając powyższe polecenia.
Naresh Joshi
2

Wywołanie Javy z „wersją java: 1.5” itd. Powinno działać z poprawną wersją Javy. (Oczywiście zamień 1.5 na wybraną wersję).

Jeśli Java jest poprawnie zainstalowana w systemie Windows, istnieją ścieżki do maszyny wirtualnej dla każdej wersji przechowywanej w rejestrze, z którego korzysta, więc nie musisz majstrować przy wersjach środowiska w systemie Windows.

jcoder
źródło
Uważam, że działa to tylko z "publicznymi" JRE. Doskonały na komputerach klienckich, trochę uciążliwy dla programistów, którzy nie instalują publicznego środowiska JRE. Znacznie lepiej niż plik wsadowy.
James Schek
2

Lub użyj linków. Chociaż aktualizacja PATH w działającym środowisku jest raczej nieprzyjemna, łatwo jest odtworzyć łącze do nowej wersji JRE / JDK. Więc:

  • zainstaluj różne wersje JDK, których chcesz używać
  • utwórz łącze do tego folderu za pomocą połączenia lub wbudowanego polecenia mklink
  • ustaw PATH na łącze
  • Jeśli ma być używana inna wersja java, usuń link, utwórz nową, PATH / JAVA_HOME / zakodowane skrypty pozostaną nietknięte
jan.supol
źródło
1

Jeśli korzystasz z Java Web Start (możesz uruchamiać aplikacje z dowolnego adresu URL, nawet z lokalnego systemu plików), zajmie się on znalezieniem odpowiedniej wersji dla Twojej aplikacji.

Peter Lawrey
źródło
0

Korzystając z Java Web Start, możesz zainstalować wiele JRE, a następnie wywołać to, czego potrzebujesz. W przypadku wygranej możesz utworzyć plik .bat:

1- wersja online: < twoja_wersja_JRE \ bin \ javaws.exe> ​​-localfile -J-Djnlp.application.href = < adres URL pliku .jnlp .jnlp> -localfile -J "< path_temp_jnlp_file_ .jnlp>"

2- uruchom z pamięci podręcznej: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J "< path_of_your_local_jnlp_file .jnlp>"

eliana_zulato
źródło