Как переключить версию java в windows

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, w...

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

Lui's user avatar

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

kapex's user avatar

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

Prakash Boda's user avatar

2

  1. Open Environment Variables editor (File Explorer > right click on
    This PC > Properties > Advanced system settings > Environment
    Variables…)
  2. Find Path variable in System variables list >
    press Edit > put %JAVA_HOME%bin; at first position. This is required
    because Java installer adds C:Program Files (x86)Common
    FilesOracleJavajavapath
    to the PATH which references to the latest Java version installed. enter image description here
  3. 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 your JAVA_HOME variable and it breaks your PATH 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 Serbis's user avatar

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

Conete Cristian's user avatar

Run this BAT file to conveniently change the java version.

Pros:

  1. It does NOT modify the PATH system environment variable.
  2. 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

CamelCamelius's user avatar

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.

  1. Java_8_home-> Points to Java 8 Location in local
  2. Java_11_home -> Points to Java 11 Location in local
  3. Java_17_home -> Points to Java 17 Location in local
  4. 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

Kid101's user avatar

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

enter image description here

answered May 26, 2022 at 8:48

Jatin's user avatar

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

Lui's user avatar

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

kapex's user avatar

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

Prakash Boda's user avatar

2

  1. Open Environment Variables editor (File Explorer > right click on
    This PC > Properties > Advanced system settings > Environment
    Variables…)
  2. Find Path variable in System variables list >
    press Edit > put %JAVA_HOME%bin; at first position. This is required
    because Java installer adds C:Program Files (x86)Common
    FilesOracleJavajavapath
    to the PATH which references to the latest Java version installed. enter image description here
  3. 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 your JAVA_HOME variable and it breaks your PATH 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 Serbis's user avatar

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

Conete Cristian's user avatar

Run this BAT file to conveniently change the java version.

Pros:

  1. It does NOT modify the PATH system environment variable.
  2. 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

CamelCamelius's user avatar

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.

  1. Java_8_home-> Points to Java 8 Location in local
  2. Java_11_home -> Points to Java 11 Location in local
  3. Java_17_home -> Points to Java 17 Location in local
  4. 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

Kid101's user avatar

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

enter image description here

answered May 26, 2022 at 8:48

Jatin's user avatar

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

Here’s my guide for Windows 10.

Step 1. Go to System Properties. Click on Environment Variables

Step 2. Add new variables, such as JAVA_8_HOME

  • JAVA_8_HOME:%ProgramFiles%Javajdk1.8.0_152bin
  • JAVA_9_HOME:%ProgramFiles%Javajdk-9.0.1bin
  • JAVA_HOME:%JAVA_8_HOME%

In my case, JAVA_8_HOME(JDK8) is pointing to C:Program FilesJavajdk1.8.0_152bin. You can replace this with your own path to javac. %JAVA_HOME% has a default value pointing to JAVA_8_HOME, which is the path for JDK8. That’s my preference, feel free to adjust accordingly.

Step 3. Select PATH and click on Edit. PATH

Step 4. Click on New and add %JAVA_HOME%. %JAVA_HOME% will be added to PATH automatically every time you launch a command prompt.


In order to switch JDK version in cmd, here’s the trick.
Step 5. I created a batch file with

@echo off
:: Switch JDK version
DOSKEY java8=SET PATH=%JAVA_8_HOME%;%PATH%;
DOSKEY java9=SET PATH=%JAVA_9_HOME%;%PATH%

Basically, it disables echo and creates two alias. In batch file any string after :: is the comments. Every time, java8 or java9 is called, it re-exports %PATH% with the new JDK path. Save it as profile.bat. You can name it whatever you want.

Step 6.
Search for regedit (Registry Editor). Click on Edit > New > String Value. Give AutoRun as the Value name and %USERPROFILE%profile.bat as the Value data. Here, please put your actual path value to the profile.bat we just created. So, whenever a command prompt is opened, it automatically loads profile.bat, which creates those two alias in the script.

Step 7. Close any command prompt you’re using or just open a new command prompt. This is because your changes will not affect opened cmd window. Environment changes only happens to new CMD.

Step 8. Verify your results here.

If you’re using different Python versions, same trick applies, too. Find my python environment settings here.

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:

Multiple Java versions on Windows

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 and C:Program Files (x86)JavaSoftJRE1.2 by default – I recommend changing this to C:Program Files (x86)Javajdk1.2.2 and C: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 to C:Program Files (x86)Javajdk1.3.1_28.
  • Java SE 1.4 – Installed to C:j2sdk1.4.2_19 by default – I recommend changing this to C: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 as java and javac) 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:

Opening Windows environment variables
Opening Windows environment variables

At this point, you can press «Enter» to open the system properties:

Windows 10 System Properties
Windows 10 System Properties

Click on «Environment Variables…» and the following window opens:

Windows environment variables Java 19
Windows environment variables Java 19

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):

Adding "%JAVA_HOME%bin" to the "Path" system variable
Adding «%JAVA_HOME%bin» to the «Path» system variable

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:

echo %JAVA_HOME% java -version

Code language: plaintext (plaintext)

Here’s what you should see:

Check your Java version with "cmd"
Check your Java version with «cmd»

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:

@echo off call javaX "Java 19"

Code language: DOS .bat (dos)

javaX.bat:

@echo off call javaX-JAVA_HOME %1 set Path=%JAVA_HOME%bin;%Path% echo %~1 activated.

Code language: DOS .bat (dos)

javaX-JAVA_HOME.bat:

@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

Code language: DOS .bat (dos)

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):

Adding "C:Program FilesJavascripts" to the "Path" system variable
Adding «C:Program FilesJavascripts» to the «Path» system variable

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:

Changing the Java version
Changing the Java version

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:

@echo off call javaX-user "Java 19"

Code language: DOS .bat (dos)

javaX-user.bat:

@echo off call javaX-JAVA_HOME %1 setx JAVA_HOME "%JAVA_HOME%" set Path=%JAVA_HOME%bin;%Path% echo %~1 activated as user default.

Code language: DOS .bat (dos)

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:

@echo off call javaX-system "Java 19"

Code language: DOS .bat (dos)

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.

Время прочтения
4 мин

Просмотры 11K

И снова здравствуйте. В преддверии старта курса «Разработчик Java» подготовили для вас перевод интересной статьи.


Если вам, как и мне, приходится одновременно работать с несколькими проектами (как с легаси, так и с современными), а возможно, вы разрабатываете какую-то библиотеку или утилиту для пользователей с разными версиями Java, то вы поймете проблему с переключением между разными JDK.

В наши дни установка, управление и переключение между JDK при разработке становится непростой задачей, потому что большое количество разработчиков все еще работает с Java 8, хотя многие уже переходят на Java 11. Эта проблема может быть решена разными способами. В этой статье мы рассмотрим некоторые из них.

Ручной способ

Вы можете скачать дистрибутивы с сайта вендора JDK и установить их все вручную (или просто распаковать их в какую-нибудь папку вроде $user/jdks) и все. Но тогда вам придется каждый раз проверять и обновлять JAVA_HOME, чтобы там была нужная вам JDK.

Это можно сделать с помощью bash-скриптов, bash-функций и т. д. В чем же тогда проблема? Вы просто можете забыть вызвать скрипт / функцию и поймете, что что-то пошло не так, только когда увидите UnsupportedClassVersionError.

Если вы предпочитаете все делать вручную, то можете покопаться в интернете для поиска решений. И это может быть хорошим вариантом для продвинутых пользователей. Но я использую для этого пару утилит. Итак, давайте посмотрим на них.

Лучший способ

На мой взгляд, идеальным решением будет объединение двух open source — инструментов, которые существуют уже довольно давно, и возможно, вы знакомы, по крайней мере, с одним из них. Но что вы не знаете, так это то, что их можно использовать вместе.

  • SDKMAN!
  • jEnv

Давайте посмотрим на их совместное использование.

Установка нескольких JDK


После установки SDKMAN! наберите:

$ sdk list java

Найдите нужного вендора, версию и введите:

$ sdk install java <id>

Давайте установим четыре JDK: две последние версии Oracle OpenJDK и две LTS-версии AdoptOpenJDK.

При установке не выбирайте JDK по умолчанию.

  1. AdoptOpenJDK сборка OpenJDK 8u252 — LTS
  2. AdoptOpenJDK сборка OpenJDK 11.0.7 — LTS
  3. Oracle OpenJDK 14 — Последний GA
  4. Oracle OpenJDK 15 — Early Access сборка

Эти четыре версии должны отвечать вашим потребностям для легаси-проектов на Java 8, для современных проектов на Java 11, а также для экспериментов с нововведениями в Java 14 и Java 15.

Отлично. У вас есть четыре JDK, установленные локально с помощью SDKMAN! Я думаю, что эта утилита действительно удобна для установки JDK и, я надеюсь, она вам тоже понравилась.

Все установленные JDK можно найти в следующем каталоге:

$ cd /Users/bruno/.sdkman/candidates/java
$ ls
11.0.7.hs-adpt  14.0.1-open     15.ea.20-open   8.0.252.hs-adpt

Если у вас нет необходимости часто переключаться между разными JDK, то этого будет достаточно. Вы можете использовать SDKMAN! для выбора JDK:

$ sdk current java
Using java version 15.ea.19-open
$ sdk default java 15.ea.20-open
Default java version set to 15.ea.20-open

На этом можно остановиться и использовать только SDKMAN!, но рано или поздно, вы забудете переключить JDK точно так же как при ручном подходе. Поэтому я предпочитаю автоматическое переключение JDK.

Управление несколькими JDK с помощью jEnv

Несмотря на то что SDKMAN! удобен для установки JDK, но он не помогает при автоматическом переключении между разными JDK при переходе от одного проекта к другому. Здесь нам поможет jEnv.

После того как вы установите несколько JDK, с помощью SDKMAN! или любыми другими способами, вам нужно будет добавить их в jEnv:

$ cd ~/.sdkman/candidates/java
$ ls -1
11.0.7.hs-adpt 
14.0.1-open    
15.ea.20-open
8.0.252.hs-adpt
$ jenv add 15.ea.20-open
openjdk64-15-ea added
15-ea added
15-ea added
...
$ jenv versions
 system
 1.8
 1.8.0.252
 11.0
 11.0.7
 14.0
 14.0.1
* 15-ea (set by /Users/bruno/.jenv/version)
 openjdk64-1.8.0.252
 openjdk64-11.0.7
 openjdk64-14.0.1
 openjdk64-15-ea

Повторите команду jenv add для оставшихся трех версий JDK.

jEnv особенно удобен для тех, кто постоянно использует командную строку. Он позволит вам:

  1. Установить версию Java глобально для вашей системы.
  2. Установить версию Java для текущего каталога / проекта, в котором вы находитесь.
  3. Установить версию Java для текущего shell’а.

jEnv использует shim и автоматически управляет переменной окружения JAVA_HOME. Таким образом, после того как вы настроите вашу систему, jEnv будет переключать версию JDK на наиболее подходящую, на основе вышеуказанных приоритетов и текущей директории. Круто! У него есть и другие полезные функции — дополнительную информацию смотрите на сайте.

Автоматическое переключение между JDK

Теперь у вас установлены Java 8, 11, 14 и 15-EA. Итак, как же переключаться между ними? Давайте настроим версии и протестируем переключение.

Сначала нужно указать дефолтную глобальную JDK в системе. Для этого я обычно использую ранние сборки (Early Access). Всякий раз, когда я начинаю работать с новым проектом, я автоматически использую предстоящий релиз, что помогает мне выявить потенциальные проблемы, которые я могу сообщить в проект OpenJDK. Вы же тоже так делаете…

$ jenv global 15

Теперь для любой папки, в которой вы находитесь, при выполнении java -version вы получите OpenJDK 15 EA.

Если у вас есть проект, который должен использовать Java 8, то перейдите в папку и запустите:

$ jenv local 1.8

В результате будет создан файл под названием .java-version со следующим содержимым:

$ cat .java-version
1.8

Этот файл сообщает jEnv, какую JDK использовать, когда вы находитесь в этой папке.

Наконец, если вы и хотите временно переключиться на другую версию JDK, то используйте jenv shell.

Здесь есть демо, которое может пояснить все вышеописанное и как работает автопереключение.

После публикации статьи на Reddit были несколько интересных комментариев, о которых стоит здесь сказать:

  • SDKMAN! с версии 5.8.1+ поддерживает sdk env и там тоже доступно автоматическое переключение.
  • direnv очень хорош и не привязан к java. Делает то же самое, что и jEnv, за исключением того, что не помогает вам легко переключать JDK. Вы должны редактировать файлы вручную.
  • autoenv — еще одна альтернатива direnv с теми же ограничениями.
  • jabba — наиболее перспективная альтернатива сочетанию SDKMAN + jEnv, поскольку поддерживает весь их функционал и работает в Windows (PowerShell), что не поддерживается другими, упомянутыми выше, инструментами.

Надеюсь, вам понравилось прочитанное. Если у вас есть вопросы, просто свяжитесь со мной в Твиттере.


УПРАВЛЯЕМ ВЕРСИЯМИ БАЗЫ ДАННЫХ ЧЕРЕЗ FLYWAY


Еще по теме

  • Миграции баз данных с Flyway
  • Асинхронное логирование с log4j для любознательных
  • OOMkiller в Docker сложнее, чем вы думаете
  • Назад в будущее с курсом «Java-разработчик»

Содержание

  1. Как я могу изменить версию среды выполнения Java в Windows (7)?
  2. 8 ответов:
  3. Изменить Java виртуальная машина по умолчанию на Windows 7
  4. Как изменить версию Java Runtime в Windows (7)?
  5. 8 ответов
  6. Windows игнорирует JAVA HOME: Как установить JDK по умолчанию?
  7. 12 ответов
  8. Как установить среду установки / выполнения Java по умолчанию (Windows)?
  9. 9 ответов
  10. Как это установить:
  11. РЕДАКТИРОВАТЬ: из Windows Vista вы можете использовать mklink /J default JRE_1.8
  12. Переключение между различными версиями JDK в Windows
  13. 3 ответов

Как я могу изменить версию среды выполнения Java в Windows (7)?

Как я могу изменить версию Java Runtime в Windows.

Я установил Java 7 для некоторых тестов, и теперь мне нужен старый java6 в качестве системного значения по умолчанию, но я не хочу удалять Java 7 (мне это нужно для более поздних тестов). Могу ли я изменить систему-используется JRE на вкладке панель управления/Java/JRE? Я могу изменить/изменить/добавить / удалить пользовательскую версию, но не системную.

8 ответов:

вы можете, конечно, переопределить настройку пути или даже обойтись без нее, явно указав путь к java.exe / javaw.exe в вашей командной строке или определении ярлыка.

если вы используете апплеты от браузер или, возможно, также Java Web Start applications (они выглядят как приложения, поскольку у них есть собственное окно, но вы запускаете их из браузера), выбор JRE определяется набором параметров реестра:

дополнительные ключи реестра создаются с помощью этой схемы:

т. е. один для крупных и один дополнительный номер версии. Каждый из этих ключей имеет такие значения (примеры показано):

. и ваш браузер будет смотреть на эти настройки, чтобы определить, какой JRE для запуска.

поскольку версии Java меняются довольно часто, теперь есть » мастер «под названием» Панель управления Java » для ручного переключения версии Java Вашего браузера. Это работает для IE, Firefox и, вероятно, других, таких как Opera и Chrome: это апплет «Java» в Windows» System Settings приложение. Вы можете выбрать любой из установленных JREs. Я верю, что волшебник возится с этими записями в реестре.

если вы похожи на меня и» удалили «старые версии Java, просто уничтожив каталоги, вы также найдете эти» призраки » среди вариантов; поэтому убедитесь, что JRE, который вы выбираете, соответствует неповрежденной установке Java!

вряд ли осталось какое-либо современное программное обеспечение Java, которое нуждается или уважает JAVA_HOME переменные среды.

. и некоторые полезные сведения о поддержке нескольких версий:

я использую для работы на UNIX-подобных машинах, но недавно мне пришлось сделать некоторую работу с Java на машине Windows 7. У меня была эта проблема, и это я ее решил. Он работал правильно для меня, поэтому я надеюсь, что он может быть использован для тех, кто может иметь эту проблему в будущем.

эти шаги представлены с учетом установки Java по умолчанию на диске C. Вы должны изменить то, что необходимо, если ваша установка не является установкой по умолчанию.

Изменить Java виртуальная машина по умолчанию на Windows 7

предположим, что мы установили Java 8, но по какой-то причине мы хотим сохранить Java 7.

1-Запустите cmd от имени администратора

5-cd в это и создает следующие ссылки:

6-cd out и создать ссылку на каталог javapath указывая на нужный javapath. Например: mklink /D javapath javapath_1.7

7-Откройте регистр и измените ключ HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime EnvironmentCurrentVersion иметь значение 1.7

9-и как только это будет сделано:

начиная с Java 1.6, java.exe устанавливается в %windir%system32, который поддерживает параметр командной строки «- version». Вы можете использовать это, чтобы выбрать конкретную версию для запуска, например:

запускает приложение jar в java 1.7, если оно установлено.

Как только я обновил свою версию Java до 8, как это было предложено браузером. Однако я выбрал для удаления предыдущей версии Java 6, которую я использовал для кодирования своих проектов. Когда я ввожу команду в «Java-версия» в cmd Он показал 1.8, и я не мог запустить Eclipse IDE на Java 1.6.

когда я установил обновление Java 8 для браузера, он изменил системную переменную «PATH», добавляя » C:ProgramDataOracleJavajavapath-с самого начала. Недавно добавленный путь указал на Java vesion 8. Поэтому я удалил этот путь из системной переменной «PATH», и все работало нормально. 🙂

все, что вам нужно сделать, это установить переменную среды PATH в Windows, чтобы указать, где ваш каталог java6 bin вместо каталога java7.

щелкните правой кнопкой мыши Мой компьютер > дополнительные системные настройки > дополнительно > Переменные среды

Если есть переменная среды JAVA_HOME, установите это, чтобы указать на правильный каталог.

убедитесь, что ссылка на java / bin обновлена в «Path»; это может быть автоматически, если у вас есть JAVA_HOME или эквивалентный набор. Если JAVA_HOME установлен, просто обновите его, чтобы ссылаться на более старую установку JRE.

Если вы используете windows 10 или windows server 2012, шаги для изменения версии среды выполнения java следующие:

Источник

Как изменить версию Java Runtime в Windows (7)?

Как я могу изменить версию Java Runtime в Windows.

Я установил Java 7 для некоторых тестов, и теперь мне нужен старый java6 по умолчанию, но я не хочу удалять Java 7 (мне это нужно для более поздних тестов). Могу ли я изменить систему-used JRE на вкладке панель управления/Java/JRE? Я могу изменить/изменить/добавить / удалить используемую пользователем версию, но не используемую системой.

8 ответов

вы можете, конечно, переопределить параметр пути или даже обойтись без него, явно указав путь к java.ехе / javaw, который.exe в командной строке или определении ярлыка.

если вы используете апплеты от браузер или, возможно, также Java Web Start приложения (они выглядят как приложения, поскольку у них есть собственное окно, но вы запускаете их из браузера), выбор JRE определяется набором настроек реестра:

дополнительные ключи реестра создаются с помощью этой схемы:

т. е. один для крупных и один дополнительный номер версии. Каждый из этих ключей имеет такие значения (примеры показано):

. и ваш браузер будет искать эти настройки, чтобы определить, какой JRE для запуска.

поскольку версии Java меняются довольно часто, теперь есть » мастер «под названием» Панель управления Java » для ручного переключения версии Java Вашего браузера. Это работает для IE, Firefox и, вероятно, других, таких как Opera и Chrome: это апплет «Java» в Windows» System Settings app. Вы можете выбрать любой из установленных JREs. Я верю этому волшебнику. возится с этими записями в реестре.

если вы похожи на меня и» удалили «старые версии Java, просто уничтожив каталоги, вы найдете эти» призраки » среди вариантов тоже; поэтому убедитесь, что JRE, который вы выбираете, соответствует неповрежденной установке Java!

вряд ли осталось какое-либо современное программное обеспечение Java, которое нуждается или уважает JAVA_HOME переменные среды.

. и некоторая полезная информация о поддержке нескольких версий:

Источник

Windows игнорирует JAVA HOME: Как установить JDK по умолчанию?

Как убедить Windows использовать JDK вместо JRE?

этот вопрос был задан раньше, здесь и в другом месте:

проблема в том, что Windows игнорирует JAVA_HOME и он также игнорирует тот факт, что я сделал каталог JDK bin первой записью в пути.

Я предполагаю, что это проблема, характерная для 1.7, и Windows 7 делает то, что не должно с реестром.

есть идеи о том, как это исправить?

редактировать: Упс. Я написал «первая запись в пути к классам» выше, когда я имел в виду «путь». Извиняюсь.

12 ответов

в Windows java исполняемый файл использует реестр Windows, чтобы найти версию Java по умолчанию для запуска.

копия java.exe выполнить с помощью PATH переменные среды. Если вы не предпримете шаги, чтобы изменить это, по умолчанию копия будет найдена в каталоге Windows. Поскольку эта копия не находится в каталоге Java runtime, она находит ее, просматривая реестр.

в Windows 8 может потребоваться удалить C:ProgramDataOracleJavajavapath справочник.

это решило мою проблему.

у меня тоже есть эта проблема. Я запускаю 1.6, но хочу создать код, над которым я работаю с 1.5. Я изменил JAVA_HOME и PATH (как пользователь, так и система) безрезультатно.

надеюсь, что это помогает!

CLASSPATH также не имеет ничего общего с Windows. Для Windows это только переменная среды, которая расширяется до расположения папки.

у меня была та же проблема. У меня установлена куча версий Java, и по какой-то причине Java 1.7 использовался вместо Java 1.6, хотя я указал в пути для использования 1.6 (C:jdk1.6.0_45_32bin).

мне пришлось переместить путь JDK, который я хотел использовать (1.6), чтобы быть первой записью в переменной среды PATH, чтобы убедиться, что Windows использует 1.6 вместо 1.7.

Так, например, переменная среды PATH раньше была:

и после Я переместил jdk, чтобы быть первым, он работал:

Я думаю, что установщик Windows Java 1.7 установил его в какой-то другой каталог уже в пути, таким образом, сначала используется вместо указанной записи пользовательского пути C:jdk1.6.0_45_32bin;

Я удалил этот текст из Пути, где мой путь уже имеет %JAVA_HOME%bin С ним.

теперь переменная ‘JAVA_HOME’ контролирует мою версию Java, которую я хотел.

У меня были установлены Java 7 и 8, и я хочу перенаправить на java 7, но версия java в моем окне командной строки cmd показывает Java 8.
Добавлен путь к каталогу Java 7 bin (C:Program файлыJavajdk1.7.0_10bin) к переменной PATH в конце, но не получилось и показывает Java 8. Поэтому я изменил путь Java 7 на начало значения пути, и это сработало.
Открыл новое окно командной строки cmd и проверил мою версию java, и теперь он показывает Java 7

установите переменную среды Path в нужный каталог jdk/bin

в моем случае у меня были установлены Java 7 и 8 (оба x64), и я хочу перенаправить на java 7, но все настроено на использование Java 8. Java использует переменную среды PATH:

в качестве первого варианта поиска своей папки runtime (является скрытой папкой). Этот путь содержит 3 символические ссылки, которые нельзя редактировать.

на моем ПК переменная среды PATH выглядит следующим образом:

в моем случае, это должно выглядеть так:

мне пришлось вырезать и вставить символические ссылки в другое место, чтобы java не могла их найти, и я могу восстановить их позже.

протестировано на Win7 x64.

3b9005bcde5fb0bde2ac150f58720b50предположим, что вы установили JDK 10 после JDK 8 и в системной переменной среды задали путь типа «C:ProgramDataOracleJavajavapath» тогда управление версиями Java по этому пути. он будет игнорировать JAVA_HOME даже путь JDK 1.8, установленный здесь Так что уберите «C:ProgramDataOracleJavajavapath» в пути, чтобы получить эффект JAVA_HOME path

здесь есть дополнительный фактор; в дополнение к исполняемым файлам java, которые установка java помещает туда, куда вы попросите их поместить, в windows, установщик java также помещает копии некоторых из этих исполняемых файлов в каталог Windows system32, поэтому вы, вероятно, будете использовать, который каждый исполняемый файл java был установлен совсем недавно.

Источник

Как установить среду установки / выполнения Java по умолчанию (Windows)?

Я нахожусь в ситуации, когда я установил JDK, но я не могу запускать апплеты в браузерах (возможно, я не установил JRE).

Однако, когда я устанавливаю JRE, он уничтожает мой JDK как среду выполнения по умолчанию. Это ломает почти все (Eclipse, Ant), поскольку им требуется серверная JVM.

9 ответов

В Windows это немного неудобно. Вот что я делаю.

Я исправил поведение моего ярлыка запуска eclipse в диалоговом окне свойств

Альтернативой является постоянная установка параметра в файле инициализации eclipse.

У меня только что была эта проблема (Java 1.8 против Java 9 в Windows 7), и мои выводы таковы:

короткая версия

По умолчанию кажется (из-за ввода пути)

Выберите нужную версию (протестируйте, используйте заполнение вкладки в cmd, не знаю, что представляют собой эти числа), у меня было 2 варианта, подробности см. в более длинной версии

Удалите соединение / ссылку и ссылку на вашу версию (та, которая заканчивается на 181743567 в моем случае для Java 8)

более длинная версия:

После установки jdk1.8.0_162 у меня все еще есть

То, что я вижу на пути, это

Итак, я проверил, что это, и обнаружил, что это перекресток (ссылка)

Эти хэши не звонят, но когда я проверил

Поэтому, чтобы снова установить Java 8 по умолчанию, мне пришлось удалить ссылку, как описано здесь

И воссоздать с помощью Java, которое я хотел

** обновление (Java 10) **

С Java 10 это похоже, только javapath находится в c: Program Files (x86) Common Files Oracle Java , что странно, поскольку я установил 64-разрядную версию IMHO

После многих попыток я обнаружил, что подход к перекрестку более удобен. Это очень похоже на то, как эта проблема решается в Linux.

По сути, он состоит из ссылки между c:toolsjavadefault и фактической версией java, которую вы хотите использовать по умолчанию в своей системе.

Как это установить:

Это создаст соединение (которое более или менее похоже на символическую ссылку в Linux) между C:toolsjavadefault и C:toolsjavaJRE_1.6

Если затем вам нужно изменить Java по умолчанию на версию 1.8, вам просто нужно выполнить

Тогда у вас могут быть командные файлы для этого без командной строки, например set_jdk8.bat set_jdk7.bat

По предложению @ СӏаџԁеМаятіи

РЕДАКТИРОВАТЬ: из Windows Vista вы можете использовать mklink /J default JRE_1.8

Я просто устанавливаю все необходимые мне версии JDK, и последняя установленная становится по умолчанию, поэтому при необходимости я просто переустанавливаю ту, которую хочу использовать по умолчанию.

Необходимо удалить C: Program Files (x86) Common Files Oracle Java javapath из среды и заменить на JAVA_HOME, который отлично подходит для меня

R5uBI

4wNXb

Кажется, что порядок переменных среды влияет на порядок просматриваемых папок при запросе исполняемого файла. Спасибо за ваш комментарий или лучшее объяснение.

Источник

Переключение между различными версиями JDK в Windows

Я работаю над несколькими проектами, и некоторые из них используют разные JDK. Переключение между версиями JDK не удобно. Поэтому мне было интересно, есть ли простой способ изменить его?

Я нашел 2 способа, которые должны решить эту проблему, но это не работает.

первым решением является создание файлов bat, как это:

и после запуска этой летучей мыши я вижу правильную версию Java. Но когда я закрываю этот CMD и открываю новый и набираю » java-версия» он говорит, что у меня все еще есть 1.8.0_25. Так что это не работает.

второе решение, которое я нашел-это приложение этой сайт. И это тоже не работает. Тот же эффект, что и в первом решении.

3 ответов

на /m опция используется для установки переменной в системе (и не только для текущего пользователя). Для использования этой опции терминал должен быть запущен от имени администратора.

существует также несколько редакторов переменных среды в качестве альтернативы громоздким настройкам переменных среды Windows. См.»есть ли удобный способ редактирования пути в Windows 7?» по супер Пользователь.

Если ваш путь имеет менее 1024 символов, можно выполнить (запуск от имени администратора) этот скрипт:

Если более 1024, попробуйте удалить некоторые ненужные пути или можете изменить эти сценарии с некоторыми входными данными из https://superuser.com/questions/387619/overcoming-the-1024-character-limit-with-setx

теперь вы можете переключаться между Java версия с использованием (должен быть запущен с правами администратора):

(Примечание: в конце строки нет двойной кавычки и не должно быть или вы получите c:Program FilesJavajdk-10.0.1» в своем JAVA_HOME переменная и она ломает ваш PATH переменной)

решение с системными переменными (и административными разрешениями) является более надежным, потому что оно помещает желаемый путь к Java в начале результирующего PATH переменная.

Источник

Java – это язык компьютерного программирования, который можно найти на настольных компьютерах, серверах, мобильных устройствах и смарт-картах. Приложение Java работает на большинстве систем, включая Linux, Mac и Windows. Существует несколько областей применения Java, например, игра в онлайн-игры и просмотр 3D-изображений. Кроме того, они также играют роль в решениях электронного бизнеса для корпоративных вычислений и так далее. Java – популярная программа в ИТ-секторе, где они используют серверное решение на основе Java, которое развернуто на серверах. Кроме того, Java, развернутая на серверах, является относительно более безопасной по сравнению с использованием Java в настольных системах. Java также может потребоваться для открытия веб-сайта или запуска программы.

Хотя не рекомендуется использовать Java на вашем персональном компьютере из-за угрозы безопасности, в некоторых неизбежных обстоятельствах может потребоваться установить Java для запуска программы или веб-страницы – и в таких случаях необходимо принять некоторые меры предосторожности. Стоит отметить, что в неизбежных ситуациях, подобных упомянутой здесь, вам следует устанавливать Java только с официального сайта. Также необходимо, чтобы вы обновляли Java-программы, чтобы злоумышленникам и хакерам было легко компилировать Java-код, который может заразить большинство компьютеров при работе в Интернете.

Большинство пользователей сталкиваются с проблемами при использовании Java в системе Windows, даже после их успешной установки в системе Windows. Если вы загрузили и установили Java, но по-прежнему не можете его использовать, возможно, ваш браузер не включил Java. Эта проблема обычно возникает, если пользователь уже использует другое приложение, требующее Java. В этом случае поставщики приложений не хотят изменять настройки браузера, и пользователь должен вручную включить последнюю установленную версию Java в Панели управления Java. Также рекомендуется включать и использовать последнюю версию Java, чтобы использовать новейшие исправления и улучшения безопасности.

В этой статье мы обсудим, как установить Java и вручную включить последнюю установленную версию Java в панели управления Java.

Вручную включить последнюю версию Java в Windows

Загрузка Java проста, и пользователям могут потребоваться права администратора для загрузки и установки Windows. Есть два способа установить Java. Пользователи могут выбрать либо получить Java через онлайн-загрузку или офлайн-загрузку с официального сайта – java.com .

После запуска процесса вы можете выбрать вариант Выполнить или Сохранить для загрузки файла из диалогового окна «Загрузка файла». Нажмите Запустить , чтобы запустить программу установки. ИЛИ Сохранить , чтобы сохранить файл для последующей установки.

Выберите папку и сохраните файл в известном месте на вашем компьютере. Чтобы начать процесс установки, дважды щелкните сохраненный файл, чтобы запустить и установить Java.

Использование панели управления Java в Windows 10

Перейдите в Пуск и откройте Панель управления .

На панели управления нажмите значок Java , чтобы открыть Панель управления Java .

Теперь, чтобы включить последнюю установленную версию Java, откройте вкладку Java . Чтобы открыть настройки среды выполнения Java, нажмите кнопку Вид .

Установите флажок Включено , чтобы разрешить использование последней версии Java Runtime.

Нажмите кнопку ОК , чтобы применить изменения настроек. Нажмите ОК на панели управления Java, чтобы подтвердить изменения.

Теперь запустите программу Java, встроенную в веб-браузер (апплет), чтобы проверить, установлена ​​ли на вашем компьютере последняя версия Java.

Это все.

Понравилась статья? Поделить с друзьями:
  • Как переключать виртуальные рабочие столы в windows 10
  • Как переключить вай фай на проводной интернет на ноутбуке windows 10
  • Как переключать аудиодорожки в windows media player
  • Как переключить безопасный режим на компьютере windows
  • Как переключать аудио выходы на компьютере windows 10