In this article, I will show you how to install multiple Java versions on Windows and how to change the Java version on the command line:
To enable these Java version change commands on your system as well, follow this step-by-step guide.
Let’s go…
Step 1: Installing Multiple Java Versions
Installing multiple Java versions in parallel is incredibly easy in Windows. You can download and run the installer for each version, which automatically installs the versions in separate directories.
Download Sources
- Java SE 1.1 – You can no longer install this version on 64-bit Windows.
- Java SE 1.2 – Installed to
C:jdk1.2.2
andC:Program Files (x86)JavaSoftJRE1.2
by default – I recommend changing this toC:Program Files (x86)Javajdk1.2.2
andC:Program Files (x86)Javajre1.2.2
for the sake of clarity. - Java SE 1.3 – Installed to
C:jdk1.3.1_28
by default – I recommend changing this toC:Program Files (x86)Javajdk1.3.1_28
. - Java SE 1.4 – Installed to
C:j2sdk1.4.2_19
by default – I recommend changing this toC:Program Files (x86)Javajdk1.4.2_19
.
Starting with the following versions, you don’t need to change the default installation directories:
- Java SE 5
- Java SE 6
- Java SE 7
- Java SE 8
- Java SE 9 / OpenJDK 9
- Java SE 10 / OpenJDK 10 (→ The most important new features in Java 10)
Attention – you may use the following Oracle distributions only for private purposes and development:
- Java SE 11 / OpenJDK 11 (→ The most important new features in Java 11)
- Java SE 12 / OpenJDK 12 (→ The most important new features in Java 12)
- Java SE 13 / OpenJDK 13 (→ The most important new features in Java 13)
- Java SE 14 / OpenJDK 14 (→ The most important new features in Java 14)
- Java SE 15 / OpenJDK 15 (→ The most important new features in Java 15)
- Java SE 16 / OpenJDK 16 (→ The most important new features in Java 16)
- Java SE 17 / OpenJDK 17 (→ The most important new features in Java 17)
- Java SE 18 / OpenJDK 18 (→ The most important new features in Java 18)
- Java SE 19 / OpenJDK 19 (→ The most important new features in Java 19)
The following version is currently an early access build. You should use it only for testing purposes:
- JDK 20 Early-Access Build (→ The most important new features in Java 20)
Step 2: Define Java Environment Variables
The following two environment variables decide which Java version an application uses:
JAVA_HOME
– many start scripts use this variable.Path
– is used when running a Java binary (such asjava
andjavac
) from the console.
These variables should always point to the same Java installation to avoid inconsistencies. Some programs, such as Eclipse, define the Java version in a separate configuration file (for Eclipse, for example, this is the entry «-vm» in the eclipse.ini
file).
Manually Setting the Java Environment Variables
The Java installers create various environment variables, which you need to clean up first (see below). The fastest way to change the environment variables is to press the Windows key and type «env» – Windows then offers «Edit the system environment variables» as a search result:
At this point, you can press «Enter» to open the system properties:
Click on «Environment Variables…» and the following window opens:
As the default version, I recommend the current release version, Java 19. Accordingly, you should make the following settings:
- The top list («User variables») should not contain any Java-related entries.
- The lower list («System variables») should contain an entry «JAVA_HOME = C:Program FilesJavajdk-19». If this entry does not exist, you can add it with «New…». If it exists but points to another directory, you can change it with «Edit…».
- Delete the following entries under «Path» (if they exist):
C:ProgramDataOracleJavajavapath
C:Program Files (x86)Common FilesOracleJavajavapath
- Insert the following entry instead:
%JAVA_HOME%bin
The entry should then look like the following (the other entries in the list will probably look different for you since you have other applications installed than I do):
The last entry ensures that Path
and JAVA_HOME
are automatically consistent.
Attention: this only works for the default setting configured here. If you change JAVA_HOME
via the command line, you have to adjust Path
accordingly. But don’t worry – the scripts you can download in the next step will do that automatically.
How to Check Your Java Version on Windows
Now open a command line to check the settings with the following commands:
Code language: plaintext (plaintext)
echo %JAVA_HOME% java -version
Here’s what you should see:
Step 3: Install the Scripts to Change the Java Version
To change the Java version on the command line, I have prepared some batch files that you can copy to your system. Here is the link: scripts-up-to-java20-v2.zip
The ZIP file contains scripts named java20.bat
, java19.bat
, java18.bat
, etc., for all Java versions, plus some common scripts starting with «javaX». I suggest you unpack the scripts to C:Program FilesJavascripts
.
The scripts look like this:
java19.bat
:
Code language: DOS .bat (dos)
@echo off call javaX "Java 19"
javaX.bat
:
Code language: DOS .bat (dos)
@echo off call javaX-JAVA_HOME %1 set Path=%JAVA_HOME%bin;%Path% echo %~1 activated.
javaX-JAVA_HOME.bat
:
Code language: DOS .bat (dos)
@echo off if %1 == "Java 1.2" set JAVA_HOME=C:Program Files (x86)Javajdk1.2.2 if %1 == "Java 1.3" set JAVA_HOME=C:Program Files (x86)Javajdk1.3.1_28 ... if %1 == "Java 19" set JAVA_HOME=C:Program FilesJavajdk-19 if %1 == "Java 20" set JAVA_HOME=C:Program FilesJavajdk-20
The scripts update the JAVA_HOME
environment variable and insert the bin
directory at the beginning of the Path
variable. That makes it the first directory to be searched for the corresponding executable when you run Java commands such as java
or javac
.
(The Path
variable gets longer with each change. Do not worry about it. This only affects the currently opened command line.)
Step 4: Add the Script Directory to the Path
To be able to call the scripts from anywhere, you have to add the directory to the «Path» environment variable (just like you did with «%JAVA_HOME%bin» in the second step):
If you have installed the latest releases of all Java versions, you can use the scripts without any further adjustments. Open a new command line and enter, e.g., the following commands:
If one of the commands does not activate the expected Java version, please check if the path in the javaX-JAVA_HOME.bat
file corresponds to the installation path of the Java version you want to activate.
Temporary, Permanent, and System-Wide Java Version Changes
The commands presented up to this point only affect the currently opened command line. As soon as you open another command line, the default version defined in step 2 is active again (Java 19, if you have not changed anything).
That is why there are not one but three scripts for each Java version:
java<version>
: Activates the Java version in the current command line.java<version>-user
: Sets the Java version as the default version for your user account.java<version>-system
: Sets the Java version as the default version for the entire system-
The -user
variants of the scripts additionally set the JAVA_HOME
environment variable with the setx
command, permanently writing the change to the registry:
java19-user.bat
:
Code language: DOS .bat (dos)
@echo off call javaX-user "Java 19"
javaX-user.bat
:
Code language: DOS .bat (dos)
@echo off call javaX-JAVA_HOME %1 setx JAVA_HOME "%JAVA_HOME%" set Path=%JAVA_HOME%bin;%Path% echo %~1 activated as user default.
The -system
variants also specify the /M
parameter in the setx
command. This sets the system-wide environment variable instead of the user-specific one:
java19-system.bat
:
Code language: DOS .bat (dos)
@echo off call javaX-system "Java 19"
javaX-system.bat
:
@echo off call javaX-JAVA_HOME %1 setx JAVA_HOME "%JAVA_HOME%" /M set Path=%JAVA_HOME%bin;%Path% echo %~1 activated as system-wide default.
Code language: DOS .bat (dos)
Attention: To set the system-wide Java version, you must open the command line as an administrator. Otherwise, you will get the error message «ERROR: Access to the registry path is denied.
What You Should Do Next…
I hope you were able to follow the instructions well and that the commands work for you.
Now I would like to hear from you:
Were you able to follow the steps well – or do you have unanswered questions?
Either way, let me know by leaving a comment below.
I’m working on few projects and some of them are using different JDK. Switching between JDK versions is not comfortable. So I was wondering if there is any easy way to change it?
I found 2 ways, which should solve this problem, but it doesn’t work.
First solution is creating a bat files like this:
@echo off
echo Setting JAVA_HOME
set JAVA_HOME=C:Program FilesJavajdk1.7.0_72
echo setting PATH
set PATH=C:Program FilesJavajdk1.7.0_72bin;%PATH%
echo Display java version
java -version
pause
And after running this bat, I see right version of Java. But when I close this CMD and open a new one and type «java -version» it says that I still have 1.8.0_25. So it doesn’t work.
Second solution which I found is an application from this site. And it also doesn’t work. The same effect as in the first solution.
Any ideas? Because changing JAVA_HOME and PAHT by: Win + Pause -> Advanced System Settings -> Environment Variables -> and editing these variables, is terrible way…
asked Nov 18, 2014 at 11:22
2
The set
command only works for the current terminal. To permanently set a system or user environment variable you can use setx
.
setx JAVA_HOME "C:Program FilesJavajdk1.7.0_72" /m
The /m
option is used to set the variable system wide (and not just for the current user). The terminal must be run as administrator to use this option.
The variable will be available in all new terminal windows, but not the current one. If you also want to use the path in the same window, you need to use both set
and setx
.
You can avoid manipulating the PATH
variable if you just once put %JAVA_HOME%
in there, instead of the full JDK path. If you change JAVA_HOME
, PATH
will be updated too.
There are also a few environment variable editors as alternative to the cumbersome Windows environment variable settings. See «Is there a convenient way to edit PATH in Windows 7?» on Super User.
answered Nov 18, 2014 at 11:29
kapexkapex
28.4k6 gold badges108 silver badges120 bronze badges
5
In case if someone want to switch frequently in each new command window then I am using following approach.
Command Prompt Version:
Create batch file using below code. You can add n number of version using if and else blocks.
@echo off
if "%~1" == "11" (
set "JAVA_HOME=C:Softwareopenjdk-11+28_windows-x64_binjdk-11"
) else (
set "JAVA_HOME=C:Program FilesJavajdk1.8.0_151"
)
set "Path=%JAVA_HOME%bin;%Path%"
java -version
Save this batch file as SJV.bat and add this file location in your machine’s Path environment variable. So now SJV will act as command to «Switch Java Version».
Now open new command window and just type SJV 11
it will switch to Java 11.
Type SJV 8
it will switch to Java 8.
PowerShell Version
Create powershell(ps1) file using below code. You can add n number of version using if and else blocks.
If($args[0] -eq "11")
{
$env:JAVA_HOME = 'C:Softwareopenjdk-11+28_windows-x64_binjdk-11'
}else{
$env:JAVA_HOME = 'C:Program FilesJavajdk1.8.0_151'
}
$env:Path = $env:JAVA_HOME+'bin;'+$env:Path
java -version
Save this script file as SJV.ps1 and add this file location in your machine’s Path environment variable. So now SJV will act as command to «Switch Java Version».
Now open new powershell window and just type SJV 11
it will switch to Java 11.
Type SJV 8
OR SJV
it will switch to Java 8.
I hope this help someone who want to change it frequently.
answered Oct 21, 2020 at 8:14
2
- Open
Environment Variables
editor (File Explorer > right click on
This PC > Properties > Advanced system settings > Environment
Variables…) - Find
Path
variable in System variables list >
press Edit > put%JAVA_HOME%bin;
at first position. This is required
because Java installer addsC:Program Files (x86)Common
to the
FilesOracleJavajavapathPATH
which references to the latest Java version installed. -
Now you can switch between Java version using
setx
command (should be run under administrative permissions):setx /m JAVA_HOME "c:Program FilesJavajdk-10.0.1
(note: there is no double quote at the end of the line and should not be or you’ll get
c:Program FilesJavajdk-10.0.1"
in yourJAVA_HOME
variable and it breaks yourPATH
variable)
Solution with system variables (and administrative permissions) is more robust because it puts desired path to Java at the start of the resulting PATH
variable.
answered Jul 6, 2018 at 19:58
Ilya SerbisIlya Serbis
20.5k6 gold badges81 silver badges72 bronze badges
If your path have less than 1024 characters can execute (Run as Administrator) this script:
@echo off
set "JAVA5_FOLDER=C:Javajdk1.5.0_22"
set "JAVA6_FOLDER=C:Javajdk1.6.0_45"
set "JAVA7_FOLDER=C:Javajdk1.7.0_80"
set "JAVA8_FOLDER=C:Javajdk1.8.0_121"
set "JAVA9_FOLDER=C:Javajdk-10.0.1"
set "CLEAR_FOLDER=C:xxxxxx"
(echo "%PATH%" & echo.) | findstr /O . | more +1 | (set /P RESULT= & call exit /B %%RESULT%%)
set /A STRLENGTH=%ERRORLEVEL%
echo path length = %STRLENGTH%
if %STRLENGTH% GTR 1024 goto byebye
echo Old Path: %PATH%
echo ===================
echo Choose new Java Version:
echo [5] JDK5
echo [6] JDK6
echo [7] JDK7
echo [8] JDK8
echo [9] JDK10
echo [x] Exit
:choice
SET /P C=[5,6,7,8,9,x]?
for %%? in (5) do if /I "%C%"=="%%?" goto JDK_L5
for %%? in (6) do if /I "%C%"=="%%?" goto JDK_L6
for %%? in (7) do if /I "%C%"=="%%?" goto JDK_L7
for %%? in (8) do if /I "%C%"=="%%?" goto JDK_L8
for %%? in (9) do if /I "%C%"=="%%?" goto JDK_L9
for %%? in (x) do if /I "%C%"=="%%?" goto byebye
goto choice
@echo on
:JDK_L5
set "NEW_PATH=%JAVA5_FOLDER%"
goto setPath
:JDK_L6
@echo off
set "NEW_PATH=%JAVA6_FOLDER%"
goto setPath
:JDK_L7
@echo off
set "NEW_PATH=%JAVA7_FOLDER%"
goto setPath
:JDK_L8
@echo off
set "NEW_PATH=%JAVA8_FOLDER%"
goto setPath
:JDK_L9
@echo off
set NEW_PATH = %JAVA9_FOLDER%
:setPath
Call Set "PATH=%%PATH:%JAVA5_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA6_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA7_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA8_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA9_FOLDER%=%CLEAR_FOLDER%%%"
rem echo Interim Path: %PATH%
Call Set "PATH=%%PATH:%CLEAR_FOLDER%=%NEW_PATH%%%"
setx PATH "%PATH%" /M
call set "JAVA_HOME=%NEW_PATH%"
setx JAVA_HOME %JAVA_HOME%
echo New Path: %PATH%
:byebye
echo
java -version
pause
If more than 1024, try to remove some unnecessary paths, or can modify this scripts with some inputs from https://superuser.com/questions/387619/overcoming-the-1024-character-limit-with-setx
answered May 15, 2018 at 9:03
Run this BAT file to conveniently change the java version.
Pros:
- It does NOT modify the PATH system environment variable.
- The only thing that has to be maintained is the relational array (can be conveniently constructed as a sparse array) that holds the version number and the path at the beginning of the script.
Precondition:
The following entry %JAVA_HOME%bin
has to be appended to the PATH
environment variable.
@echo off
@cls
@title Switch Java Version
setlocal EnableExtensions DisableDelayedExpansion
:: This bat file Switches the Java Version using the JAVA_HOME variable.
:: This script does NOT modify the PATH system environment variable.
:: Precondition: The following entry "%JAVA_HOME%bin" has to be appended to the PATH environment variable.
:: Script Name: SwitchJavaVersion | Version 1 | 2021/11/04
rem Add items to vector as follows:
rem AvailableVersions["Java Major Version Number"]="Java Absolute Path"
set AvailableVersions[8]="D:Program FilesJavajdk8u252-b09"
set AvailableVersions[17]="D:Program FilesJavajdk-17.0.1"
call :PrintJavaVersion
call :PrintAvailableVersions
call :GetJavaVersion
call :SetJavaVersion
call :ResetLocalPath
if %errorlevel% neq 0 exit /b %errorlevel%
call :PrintJavaVersion
pause
endlocal
exit /b
rem Print available versions.
:PrintAvailableVersions
echo Available Java Versions:
for /f "tokens=2 delims=[]" %%I in ('set AvailableVersions[') do echo ^> %%I
exit /b
rem Get version from user input or command-line arguments.
:GetJavaVersion
set "JavaVersion="
if "%~1"=="" (
set /p JavaVersion="Type the major java version number you want to switch to: "
) else (
set /a JavaVersion="%~1"
)
exit /b
rem Update JAVA_HOME user variable with hardcoded paths.
:SetJavaVersion
set JavaPath=
for /f "tokens=2 delims=[]" %%I in ('set AvailableVersions[') do (
if "%%I" == "%JavaVersion%" (
setlocal EnableDelayedExpansion
set JavaPath=!AvailableVersions[%%I]!
setlocal EnableExtensions DisableDelayedExpansion
)
)
if not defined JavaPath (
echo "Specified version NOT found: Default settings applied."
for /f "tokens=2 delims==" %%I in ('set AvailableVersions[') do (
set JavaPath=%%I
goto exitForJavaPath
)
)
:exitForJavaPath
rem remove quotes from path
set JavaPath=%JavaPath:"=%
set "JAVA_HOME=%JavaPath%"
setx JAVA_HOME "%JAVA_HOME%"
rem setlocal statement was run 2 times previously inside the for loop; therefore, the endlocal statement must be executed 2 times to close those nested local scopes.
rem below endlocal statement will close local scope set by previous "setlocal EnableExtensions DisableDelayedExpansion" statement
endlocal & set "JavaPath=%JavaPath%"
rem JAVA_HOME's value rolls back due to endlocal statement so the appropriate value has to be reassigned
set "JAVA_HOME=%JavaPath%"
rem below endlocal statement will close local scope set by previous "setlocal EnableDelayedExpansion" statement
endlocal & set "JavaPath=%JavaPath%"
rem JAVA_HOME's value rolls back due to endlocal statement so the appropriate value has to be reassigned
set "JAVA_HOME=%JavaPath%"
exit /b
rem Get User and System Path variable's definition from Registry,
rem evaluate the definitions with the new values and reset
rem the local path variable so newly set java version
rem is properly displayed.
:ResetLocalPath
set "PathValue="
for /F "skip=2 tokens=1,2,*" %%I in ('%SystemRoot%System32reg.exe QUERY "HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment" /V Path') do if /I "%%I" == "Path" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "PathValue=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "PathValue=%%~K"
if not defined PathValue goto pathError
set "UserPathValue="
for /F "skip=2 tokens=1,2,*" %%I in ('%SystemRoot%System32reg.exe QUERY "HKCUEnvironment" /V Path') do if /I "%%I" == "Path" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "UserPathValue=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "UserPathValue=%%~K"
if not defined UserPathValue goto pathError
call set "Path=%PathValue%;%UserPathValue%"
echo Path variable reset:
echo PATH=%Path%
echo.
exit /b
rem Display the Java version.
:PrintJavaVersion
echo Current Java Version:
java -version
echo.
exit /b
rem Error handling subroutine.
:pathError
echo.
echo Error while refreshing the PATH variable:
echo PathValue=%PathValue%
echo UserPathValue=%UserPathValue%
pause
exit /b 2
endlocal
exit
answered Nov 5, 2021 at 4:22
Load below mentioned PowerShell script at the start of the PowerShell. or generate the file using New-Item $profile -Type File -Force
this will create a file here C:Users{user_name}DocumentsWindowsPowerShellMicrosoft.PowerShell_profile
Now copy-paste the content given below in this file to be loaded each time the PowerShell is started
Set all the java versions you need as separate variables.
- Java_8_home-> Points to Java 8 Location in local
- Java_11_home -> Points to Java 11 Location in local
- Java_17_home -> Points to Java 17 Location in local
- Java_Home-> This points to the java version you want to use
Run in power shell to update the version to 8 update_java_version 8 $True
To update execution policy to allow script to be loaded at start of the PowerShell use below command
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force
`
function update_java_version($version, [bool] $everywhere)
{
switch ($version)
{
8 {
$java_value = (Get-Item Env:Java_8_home).value
$Env:Java_Home = $java_value
refresh-path
break
}
11 {
$java_value = (Get-Item Env:Java_11_home).value
$Env:Java_Home = $java_value
refresh-path
break
}
17 {
$java_value = (Get-Item Env:Java_17_home).value
$Env:Java_Home = $java_value
refresh-path
break
}
default {
throw "No matching java version found for `$version`: $version"
}
}
if ($everywhere)
{
[System.Environment]::SetEnvironmentVariable("Java_Home", $java_value, "User")
}
}
function refresh-path
{
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") +
";" +
[System.Environment]::GetEnvironmentVariable("Path", "User")
}
answered Jan 4, 2022 at 8:51
Kid101Kid101
1,4409 silver badges25 bronze badges
Adding to the answer provided here (https://stackoverflow.com/a/64459399/894565).
I manually created environment variables via UI for Java11
, Java17
and Java8
. To change across Java version:
From powershell (PJV.ps1
):
if($args[0] -eq "11") {
$Env:JAVA_HOME="$ENV:JAVA11"
$Env:Path="$Env:JAVA_HOMEbin;$Env:Path"
} elseif($args[0] -eq "17") {
$Env:JAVA_HOME="$ENV:JAVA17"
$Env:Path="$Env:JAVA_HOMEbin;$Env:Path"
} elseif($args[0] -eq "8") {
$Env:JAVA_HOME="$ENV:JAVA8"
$Env:Path="$Env:JAVA_HOMEbin;$Env:Path"
}
set "Path=%JAVA_HOME%bin;%Path%"
java -version
From command line (JV.bat
):
@echo off
if "%~1" == "11" (
set "JAVA_HOME=%JAVA11%"
setx JAVA_HOME "%JAVA11%"
) else if "%~1" == "17" (
set "JAVA_HOME=%JAVA17%"
setx JAVA_HOME "%JAVA17%"
) else (
set "JAVA_HOME=%JAVA8%"
setx JAVA_HOME "%JAVA8%"
)
set "Path=%JAVA_HOME%bin;%Path%"
java -version
Finally both these files are in the same folder. And this folder path has been added to my system PATH
answered May 26, 2022 at 8:48
JatinJatin
30.8k15 gold badges98 silver badges160 bronze badges
I’m working on few projects and some of them are using different JDK. Switching between JDK versions is not comfortable. So I was wondering if there is any easy way to change it?
I found 2 ways, which should solve this problem, but it doesn’t work.
First solution is creating a bat files like this:
@echo off
echo Setting JAVA_HOME
set JAVA_HOME=C:Program FilesJavajdk1.7.0_72
echo setting PATH
set PATH=C:Program FilesJavajdk1.7.0_72bin;%PATH%
echo Display java version
java -version
pause
And after running this bat, I see right version of Java. But when I close this CMD and open a new one and type «java -version» it says that I still have 1.8.0_25. So it doesn’t work.
Second solution which I found is an application from this site. And it also doesn’t work. The same effect as in the first solution.
Any ideas? Because changing JAVA_HOME and PAHT by: Win + Pause -> Advanced System Settings -> Environment Variables -> and editing these variables, is terrible way…
asked Nov 18, 2014 at 11:22
2
The set
command only works for the current terminal. To permanently set a system or user environment variable you can use setx
.
setx JAVA_HOME "C:Program FilesJavajdk1.7.0_72" /m
The /m
option is used to set the variable system wide (and not just for the current user). The terminal must be run as administrator to use this option.
The variable will be available in all new terminal windows, but not the current one. If you also want to use the path in the same window, you need to use both set
and setx
.
You can avoid manipulating the PATH
variable if you just once put %JAVA_HOME%
in there, instead of the full JDK path. If you change JAVA_HOME
, PATH
will be updated too.
There are also a few environment variable editors as alternative to the cumbersome Windows environment variable settings. See «Is there a convenient way to edit PATH in Windows 7?» on Super User.
answered Nov 18, 2014 at 11:29
kapexkapex
28.4k6 gold badges108 silver badges120 bronze badges
5
In case if someone want to switch frequently in each new command window then I am using following approach.
Command Prompt Version:
Create batch file using below code. You can add n number of version using if and else blocks.
@echo off
if "%~1" == "11" (
set "JAVA_HOME=C:Softwareopenjdk-11+28_windows-x64_binjdk-11"
) else (
set "JAVA_HOME=C:Program FilesJavajdk1.8.0_151"
)
set "Path=%JAVA_HOME%bin;%Path%"
java -version
Save this batch file as SJV.bat and add this file location in your machine’s Path environment variable. So now SJV will act as command to «Switch Java Version».
Now open new command window and just type SJV 11
it will switch to Java 11.
Type SJV 8
it will switch to Java 8.
PowerShell Version
Create powershell(ps1) file using below code. You can add n number of version using if and else blocks.
If($args[0] -eq "11")
{
$env:JAVA_HOME = 'C:Softwareopenjdk-11+28_windows-x64_binjdk-11'
}else{
$env:JAVA_HOME = 'C:Program FilesJavajdk1.8.0_151'
}
$env:Path = $env:JAVA_HOME+'bin;'+$env:Path
java -version
Save this script file as SJV.ps1 and add this file location in your machine’s Path environment variable. So now SJV will act as command to «Switch Java Version».
Now open new powershell window and just type SJV 11
it will switch to Java 11.
Type SJV 8
OR SJV
it will switch to Java 8.
I hope this help someone who want to change it frequently.
answered Oct 21, 2020 at 8:14
2
- Open
Environment Variables
editor (File Explorer > right click on
This PC > Properties > Advanced system settings > Environment
Variables…) - Find
Path
variable in System variables list >
press Edit > put%JAVA_HOME%bin;
at first position. This is required
because Java installer addsC:Program Files (x86)Common
to the
FilesOracleJavajavapathPATH
which references to the latest Java version installed. -
Now you can switch between Java version using
setx
command (should be run under administrative permissions):setx /m JAVA_HOME "c:Program FilesJavajdk-10.0.1
(note: there is no double quote at the end of the line and should not be or you’ll get
c:Program FilesJavajdk-10.0.1"
in yourJAVA_HOME
variable and it breaks yourPATH
variable)
Solution with system variables (and administrative permissions) is more robust because it puts desired path to Java at the start of the resulting PATH
variable.
answered Jul 6, 2018 at 19:58
Ilya SerbisIlya Serbis
20.5k6 gold badges81 silver badges72 bronze badges
If your path have less than 1024 characters can execute (Run as Administrator) this script:
@echo off
set "JAVA5_FOLDER=C:Javajdk1.5.0_22"
set "JAVA6_FOLDER=C:Javajdk1.6.0_45"
set "JAVA7_FOLDER=C:Javajdk1.7.0_80"
set "JAVA8_FOLDER=C:Javajdk1.8.0_121"
set "JAVA9_FOLDER=C:Javajdk-10.0.1"
set "CLEAR_FOLDER=C:xxxxxx"
(echo "%PATH%" & echo.) | findstr /O . | more +1 | (set /P RESULT= & call exit /B %%RESULT%%)
set /A STRLENGTH=%ERRORLEVEL%
echo path length = %STRLENGTH%
if %STRLENGTH% GTR 1024 goto byebye
echo Old Path: %PATH%
echo ===================
echo Choose new Java Version:
echo [5] JDK5
echo [6] JDK6
echo [7] JDK7
echo [8] JDK8
echo [9] JDK10
echo [x] Exit
:choice
SET /P C=[5,6,7,8,9,x]?
for %%? in (5) do if /I "%C%"=="%%?" goto JDK_L5
for %%? in (6) do if /I "%C%"=="%%?" goto JDK_L6
for %%? in (7) do if /I "%C%"=="%%?" goto JDK_L7
for %%? in (8) do if /I "%C%"=="%%?" goto JDK_L8
for %%? in (9) do if /I "%C%"=="%%?" goto JDK_L9
for %%? in (x) do if /I "%C%"=="%%?" goto byebye
goto choice
@echo on
:JDK_L5
set "NEW_PATH=%JAVA5_FOLDER%"
goto setPath
:JDK_L6
@echo off
set "NEW_PATH=%JAVA6_FOLDER%"
goto setPath
:JDK_L7
@echo off
set "NEW_PATH=%JAVA7_FOLDER%"
goto setPath
:JDK_L8
@echo off
set "NEW_PATH=%JAVA8_FOLDER%"
goto setPath
:JDK_L9
@echo off
set NEW_PATH = %JAVA9_FOLDER%
:setPath
Call Set "PATH=%%PATH:%JAVA5_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA6_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA7_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA8_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA9_FOLDER%=%CLEAR_FOLDER%%%"
rem echo Interim Path: %PATH%
Call Set "PATH=%%PATH:%CLEAR_FOLDER%=%NEW_PATH%%%"
setx PATH "%PATH%" /M
call set "JAVA_HOME=%NEW_PATH%"
setx JAVA_HOME %JAVA_HOME%
echo New Path: %PATH%
:byebye
echo
java -version
pause
If more than 1024, try to remove some unnecessary paths, or can modify this scripts with some inputs from https://superuser.com/questions/387619/overcoming-the-1024-character-limit-with-setx
answered May 15, 2018 at 9:03
Run this BAT file to conveniently change the java version.
Pros:
- It does NOT modify the PATH system environment variable.
- The only thing that has to be maintained is the relational array (can be conveniently constructed as a sparse array) that holds the version number and the path at the beginning of the script.
Precondition:
The following entry %JAVA_HOME%bin
has to be appended to the PATH
environment variable.
@echo off
@cls
@title Switch Java Version
setlocal EnableExtensions DisableDelayedExpansion
:: This bat file Switches the Java Version using the JAVA_HOME variable.
:: This script does NOT modify the PATH system environment variable.
:: Precondition: The following entry "%JAVA_HOME%bin" has to be appended to the PATH environment variable.
:: Script Name: SwitchJavaVersion | Version 1 | 2021/11/04
rem Add items to vector as follows:
rem AvailableVersions["Java Major Version Number"]="Java Absolute Path"
set AvailableVersions[8]="D:Program FilesJavajdk8u252-b09"
set AvailableVersions[17]="D:Program FilesJavajdk-17.0.1"
call :PrintJavaVersion
call :PrintAvailableVersions
call :GetJavaVersion
call :SetJavaVersion
call :ResetLocalPath
if %errorlevel% neq 0 exit /b %errorlevel%
call :PrintJavaVersion
pause
endlocal
exit /b
rem Print available versions.
:PrintAvailableVersions
echo Available Java Versions:
for /f "tokens=2 delims=[]" %%I in ('set AvailableVersions[') do echo ^> %%I
exit /b
rem Get version from user input or command-line arguments.
:GetJavaVersion
set "JavaVersion="
if "%~1"=="" (
set /p JavaVersion="Type the major java version number you want to switch to: "
) else (
set /a JavaVersion="%~1"
)
exit /b
rem Update JAVA_HOME user variable with hardcoded paths.
:SetJavaVersion
set JavaPath=
for /f "tokens=2 delims=[]" %%I in ('set AvailableVersions[') do (
if "%%I" == "%JavaVersion%" (
setlocal EnableDelayedExpansion
set JavaPath=!AvailableVersions[%%I]!
setlocal EnableExtensions DisableDelayedExpansion
)
)
if not defined JavaPath (
echo "Specified version NOT found: Default settings applied."
for /f "tokens=2 delims==" %%I in ('set AvailableVersions[') do (
set JavaPath=%%I
goto exitForJavaPath
)
)
:exitForJavaPath
rem remove quotes from path
set JavaPath=%JavaPath:"=%
set "JAVA_HOME=%JavaPath%"
setx JAVA_HOME "%JAVA_HOME%"
rem setlocal statement was run 2 times previously inside the for loop; therefore, the endlocal statement must be executed 2 times to close those nested local scopes.
rem below endlocal statement will close local scope set by previous "setlocal EnableExtensions DisableDelayedExpansion" statement
endlocal & set "JavaPath=%JavaPath%"
rem JAVA_HOME's value rolls back due to endlocal statement so the appropriate value has to be reassigned
set "JAVA_HOME=%JavaPath%"
rem below endlocal statement will close local scope set by previous "setlocal EnableDelayedExpansion" statement
endlocal & set "JavaPath=%JavaPath%"
rem JAVA_HOME's value rolls back due to endlocal statement so the appropriate value has to be reassigned
set "JAVA_HOME=%JavaPath%"
exit /b
rem Get User and System Path variable's definition from Registry,
rem evaluate the definitions with the new values and reset
rem the local path variable so newly set java version
rem is properly displayed.
:ResetLocalPath
set "PathValue="
for /F "skip=2 tokens=1,2,*" %%I in ('%SystemRoot%System32reg.exe QUERY "HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment" /V Path') do if /I "%%I" == "Path" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "PathValue=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "PathValue=%%~K"
if not defined PathValue goto pathError
set "UserPathValue="
for /F "skip=2 tokens=1,2,*" %%I in ('%SystemRoot%System32reg.exe QUERY "HKCUEnvironment" /V Path') do if /I "%%I" == "Path" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "UserPathValue=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "UserPathValue=%%~K"
if not defined UserPathValue goto pathError
call set "Path=%PathValue%;%UserPathValue%"
echo Path variable reset:
echo PATH=%Path%
echo.
exit /b
rem Display the Java version.
:PrintJavaVersion
echo Current Java Version:
java -version
echo.
exit /b
rem Error handling subroutine.
:pathError
echo.
echo Error while refreshing the PATH variable:
echo PathValue=%PathValue%
echo UserPathValue=%UserPathValue%
pause
exit /b 2
endlocal
exit
answered Nov 5, 2021 at 4:22
Load below mentioned PowerShell script at the start of the PowerShell. or generate the file using New-Item $profile -Type File -Force
this will create a file here C:Users{user_name}DocumentsWindowsPowerShellMicrosoft.PowerShell_profile
Now copy-paste the content given below in this file to be loaded each time the PowerShell is started
Set all the java versions you need as separate variables.
- Java_8_home-> Points to Java 8 Location in local
- Java_11_home -> Points to Java 11 Location in local
- Java_17_home -> Points to Java 17 Location in local
- Java_Home-> This points to the java version you want to use
Run in power shell to update the version to 8 update_java_version 8 $True
To update execution policy to allow script to be loaded at start of the PowerShell use below command
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force
`
function update_java_version($version, [bool] $everywhere)
{
switch ($version)
{
8 {
$java_value = (Get-Item Env:Java_8_home).value
$Env:Java_Home = $java_value
refresh-path
break
}
11 {
$java_value = (Get-Item Env:Java_11_home).value
$Env:Java_Home = $java_value
refresh-path
break
}
17 {
$java_value = (Get-Item Env:Java_17_home).value
$Env:Java_Home = $java_value
refresh-path
break
}
default {
throw "No matching java version found for `$version`: $version"
}
}
if ($everywhere)
{
[System.Environment]::SetEnvironmentVariable("Java_Home", $java_value, "User")
}
}
function refresh-path
{
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") +
";" +
[System.Environment]::GetEnvironmentVariable("Path", "User")
}
answered Jan 4, 2022 at 8:51
Kid101Kid101
1,4409 silver badges25 bronze badges
Adding to the answer provided here (https://stackoverflow.com/a/64459399/894565).
I manually created environment variables via UI for Java11
, Java17
and Java8
. To change across Java version:
From powershell (PJV.ps1
):
if($args[0] -eq "11") {
$Env:JAVA_HOME="$ENV:JAVA11"
$Env:Path="$Env:JAVA_HOMEbin;$Env:Path"
} elseif($args[0] -eq "17") {
$Env:JAVA_HOME="$ENV:JAVA17"
$Env:Path="$Env:JAVA_HOMEbin;$Env:Path"
} elseif($args[0] -eq "8") {
$Env:JAVA_HOME="$ENV:JAVA8"
$Env:Path="$Env:JAVA_HOMEbin;$Env:Path"
}
set "Path=%JAVA_HOME%bin;%Path%"
java -version
From command line (JV.bat
):
@echo off
if "%~1" == "11" (
set "JAVA_HOME=%JAVA11%"
setx JAVA_HOME "%JAVA11%"
) else if "%~1" == "17" (
set "JAVA_HOME=%JAVA17%"
setx JAVA_HOME "%JAVA17%"
) else (
set "JAVA_HOME=%JAVA8%"
setx JAVA_HOME "%JAVA8%"
)
set "Path=%JAVA_HOME%bin;%Path%"
java -version
Finally both these files are in the same folder. And this folder path has been added to my system PATH
answered May 26, 2022 at 8:48
JatinJatin
30.8k15 gold badges98 silver badges160 bronze badges
Я сделал следующее:
1. Установите переменную окружения JAVA_HOME:
2. Добавьте Java 1.6.0_45 и отключите Java 1.8.0_66 в настройках среды выполнения Java в разделе Настройка Java:
К сожалению, Java все еще 1.8.0_66:
>java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b18, mixed mode)
Может ли кто-нибудь предложить совет по этому вопросу?
Редактировать:
Согласно предложению Дэвида, следующее — это связанное с Java содержимое из вывода команды PATH (весь вывод очень длинный, я надеюсь, что для этого вопроса достаточно следующего).
PATH=C:ProgramDataOracleJavajavapath; ... C:Program FilesJavajdk1.6.0_45bin
java -version
использует неверную версию Java.
Диагностика:
>java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b18, mixed mode)
Ниже приведено связанное с Java содержимое из вывода
PATH
:
PATH=C:ProgramDataOracleJavajavapath; ... C:Program FilesJavajdk1.6.0_45bin
Заключение:
Из приведенного выше вывода мы можем вывести, что C:ProgramDataOracleJavajavapath
равен 1.8.0_66
.
Вам нужно изменить PATH
чтобы сначала поместить C:Program FilesJavajdk1.6.0_45bin
.
Я заметил, что после проверки пути в соответствии с вашим предложением. Windows 10 не позволяет мне редактировать путь, потому что он говорит: «Эта переменная среды слишком велика». Я знаю, что должен быть другой вопрос, чтобы иметь дело с этим отдельно.
Вы также должны очистить свой путь. Я думаю, у вас много повторяющихся записей.
ответ дан DavidPostill106k
Это НАСТОЯЩИЙ активный исполняемый файл JAVA в вашей переменной PATH:
C:Program Files (x86)Common FilesOracleJavajavapath;
Удалите его, и система примет значение от
...;%JAVA_HOME%bin;
ответ дан Robot Model 6751
Проверьте также реестр. Нажмите клавишу Win-R, введите regedit
. Найдите ComputerHKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment
. Если есть что-то другое, чем вы ожидаете, то лучше переустановить Java. Если это невозможно, очень осторожно измените настройки. Имейте в виду, что от версии к версии настройки могут отличаться. В моем случае я бы понизил версию Java 1.9 до 1.8.
Настройка реестра Java
Как вы можете проверить переменную javapath в системной переменной пути к среде.
Так что если вы хотите использовать свою собственную версию.Ты можешь сделать
- 1) Создать новую переменную в системной переменной
- 2) Назовите его как JAVA_HOME и укажите путь установки jdk
- 3) добавьте эту переменную в путь и переместите ее наверх.
- 4) проверить версию Java
вам нужно создать JAVA_HOME
У меня та же проблема, я установил JAVA_HOME
:
C:Program FilesJavajdk1.7.0_75
и Path
к:
%JAVA_HOME%bin
Мне нужно запустить JDK 7. Когда я запускаю java -version
всегда появляется jdk 8.
Я решил это с помощью: в System Environment -> Path -> order %JAVA_HOME%bin
to first.
ответ дан Tarmizi Hamid11
Корректная работа большинства приложений возможна лишь в том случае, если версия программных компонентов актуальна. Java — не исключение. В этой статье мы рассмотрим, как обновить Java до последней актуальной версии и предложим несколько способов решения вопроса.
Когда пишут подробные гайды о том, как устанавливается Java, далеко не всегда упоминают, что версию Java надо периодически обновлять. «Зачем вообще это делать?» — спросите вы. Для этого существует 2 веские причины:
— обновление версии Джава на компьютере сделает доступными все последние функции программного обеспечения;
— обновление версии Java повысит уровень безопасности. Чем реже обновлять программу после установки, тем выше вероятность ее взлома злоумышленниками, т. к. рано или поздно в устаревших версиях ПО появляются бреши и слабые места, которые особенно уязвимы с точки зрения информационной безопасности. О том, что устаревшие версии Java — это серьезная угроза безопасности, сказано и на официальном разработчиков.
Обновление и установка Java происходит иначе, если сравнивать с тем же JavaScript (JavaScript — язык программирования, посредством которого страницы веб-сайтов приобретают интерактивность, то есть поддержка JavaScript в web-браузерах включена по умолчанию).
Чтобы выполнить update в Джава, иногда надо удалить старые версии программы (отдельные модули) и выполнить установку новых. Сделать это можно на сайте разработчиков. Существует специальная страница с инструментом, позволяющим избавиться от старых out of date версий, чтобы потом установить новые версии Java. Для работы просто нажмите кнопку, указанную на сайте. В результате можно будет загрузить исполняемый файл JavaUninstallTool.exe
. Программа проверит, есть ли на вашем компьютере версии Java, которые можно деинсталлировать. Далее вы спокойно производите установку актуальной версии, указав куда.
Самостоятельное обновление. Включение автоматического режима
Обновить программный компонент можно и самому, для чего используется Java Control Panel (устанавливается одновременно с Джава). Получить доступ к этому инструменту несложно, да и дополнительно загружать ничего не надо.
Откройте «Все элементы панели управления», найдите значок Java, запустите его.
Наберите «java» в меню «Пуск», выберите Check for Updates, выполните запуск.
В результате вы откроете программу, позволяющую обслуживать версию Java, установленную на ваш персональный компьютер. В нашем случае требуется открыть вкладку «Update».
Чтобы загрузить новую версию, останется лишь нажать кнопку «Update Now». Все, обновление устанавливается сразу и куда надо!
Если есть необходимость, Java Control Panel устанавливает все автоматически. Обновиться таким образом можно с помощью продвинутых настроек. Куда нажать? Все просто: чтобы предоставить системе возможность самостоятельно выполнять загрузку и установку обновлений, отмечаем галочкой чек-бокс «Check for Updates Automatically» и нажимаем кнопку «Advanced».
В результате вы получите возможность выбирать периодичность апдейта: ежедневно, еженедельно, ежемесячно. Плюс можно выбирать день недели и конкретное время, то есть вы формируете для системы расписание загрузки. Вдобавок к этому, возможна настройка уведомлений:
— уведомление приходит до начала загрузки компонентов;
— уведомление приходит после загрузки, но до начала непосредственной установки.
Вот и все, теперь вы будете знать не только о том, как установить Java, но и о том, как скачать и обновить программу, то есть поставить на ПК самую последнюю версию. Желаем успешно обновиться!
Источники:
- https://javaupdate.ru/faq/kak-obnovit;
- https://www.java.com/ru/download/uninstalltool.jsp.
Корректная работа некоторых приложений и игр возможна только при наличии актуальных версий программных компонентов. Поэтому нужно знать, как обновить Java до последней версии. Далее вы узнаете как скачать и установить Java 8 в сборке Update 45, если вам требуется именно эта модификация.
Благодаря программной среде Джава пользователи могут соревноваться между собой в компьютерных играх, просматривать трехмерные картинки, общаться друг с другом из любой точки мира.
Обновление Java дает возможность усовершенствовать ПО, поднять уровень безопасности. Пользователи смогут работать и играть с помощью приложения, используя разработанную вычислительную среду. Подробнее о значении Java для запуска и разработки программ рассказано в отдельной статье.
Как обновить Java до последней версии
Установите или обновите модуль до последней версии с помощью нашего сайта. Подробнее об этом расскажем ниже, а пока узнайте, какая модификация программы действует на вашем компьютере.
- Перейдите на официальный сайт разработчиков Java, нажмите кнопку «Проверить версию». Можете кликнуть по аналогичной кнопке выше на этой странице.
- После анализа система выдаст заключение, что требуется обновить программные компоненты, и предоставит возможность скачать последнюю версию ПО. Остается нажать кнопку запуска установки.
Загрузить ПО на компьютер можно и без проверки обновлений. Для этого в шапке сайта перейдите к загрузке для вашей версии операционной системы. Поменяйте разрядность программы, если предложенная версия не подходит используемой ОС.
Автоматическое обновление
Чтобы обновить программный компонент автоматически, запустите Java и настройку Update Available. Для этого выполните следующую инструкцию:
- Откройте «Панель управления».
- Найдите иконку Java, запустите.
- Чтобы обновить, нажмите Update, а затем – Update Now.
Обновить до последней версии таким образом можно Java 32 и 64 bit.
Раздел Java Update используется для предоставления системе возможности самостоятельно обновить ПО. Для этого поставьте галочку в единственно возможном месте, затем нажмите Advanced, чтобы указать системе расписание для загрузки программы.
Если проверка обновлений программируется на каждодневный запуск, что является лучшим вариантом для пользователей, то открывается возможность установить точное время для проверки. Это актуально для владельцев ПК со слабой сборкой, где работа каждого ПО может серьезно нагрузить систему.
Соответственно, выбор еженедельной проверки подразумевает установку конкретного дня, а поиск обновлений раз в месяц делит календарный отрезок на четыре части. При этом уведомления о необходимости обновить приложение (при проверке раз в месяц) приходят в течение 30 дней после выхода доработанных компонентов.
Если обновление важное и решает критические ошибки в работе пользователей, то уведомление приходит быстрее.
Уведомления настраиваются на вкладке Update, в строке Notify me. Есть два режима:
- До загрузки. Устанавливается по умолчанию. Уведомляет, что система планирует обновить Джава и приступает к загрузке компонентов.
- До установки. Оповещение приходит после завершения загрузки, но перед началом работы мастера.
Отключаются оповещения только совместно с возможностью автоматически обновить ПО. Для этого снимается флажок со строки проверки.
Видео: Простой способ автоматически обновить Java.
Скачать последнюю версию
Перед тем как скачать обновление для программы, нужно удалить ранее загружаемые компоненты Java Version 8. После этого можно бесплатно скачать Java 8 Update 181, кликнув по кнопке ниже.
Update 45
Некоторым пользователям требуется определенная версия программы. Чаще всего это Update 45. Обновление рекомендуется к установке на ПК с проблемами в работе приложения.
Как правильно удалить предыдущую версию
Для скачивания обновленного ПО удалите старые компоненты программы с компьютера. Чтобы сделать это правильно, воспользуйтесь инструкцией:
- В меню «Пуск» выберите «Панель управления».
- Нажмите «Программы», а затем – «Программы и компоненты».
- В предложенном списке найдите Java 8, щелкните по строке и нажмите «Удалить».
Это полностью очистит компьютер от следов приложения. Для надежности можно воспользоваться CCleaner. Теперь можно устанавливать новую программу.
Загрузка…