문제

이 질문 Java bin 디렉토리를 포함하여 Windows에서 경로 변수를 설정하는 방법을 묻고 프롬프트에서 Javac 명령을 사용할 수 있습니다. 이 질문에 게시 된 솔루션에 따르면 최신 Java 설치의 절대 경로를 하드 코딩해야합니다.

이 경우에는 발생합니다 c:\program files\java\jdk1.6.0_16\bin

Java Update 17, 18 이상이 설치되면 Javac CMD가 여전히이 이전 버전을 사용할 것입니다. 맞습니까?

내가 뭔가를 놓치고 있습니까 ?? 가장 최근에 설치된 Java 업데이트를 자동으로 사용하도록 설정하는 방법이 있습니까 ??

도움이 되었습니까?

해결책

Java Update 17, 18 이상이 설치되면 Javac CMD가 여전히이 이전 버전을 사용할 것입니다. 맞습니까?

옳은. Java가 업데이트되면 Get 's 업데이트는 JRE (Java Runtime Environment)입니다.

Java 플러그인 (브라우저에서 사용)과 Java 명령이 최신 버전으로 설정되어 자동으로 설정됩니다. (터미널 열기 및 유형 Java -Version)

Javac이 포함 된 SDK (Java SDK) ~ 아니다 변경. 수동으로해야합니다.

한 가지 옵션은 Mhaller가 말하는 것을 수행하는 것입니다.

Windows의 환경 변수를 사용하여 더 나아갑니다.

mypc/rigthclick/properties/advaced/환경 변환/

거기에서 나는 원하는 JDK 경로 (c : jsdk_x_x_x)에 Java_home Poiting을 추가하고 경로 변수를 다음으로 설정합니다.

 whatever;_it_had;_before;%JAVA_HOME%\bin

가장 최근에 설치된 Java 업데이트를 자동으로 사용하도록 설정하는 방법이 있습니까 ??

JRE의 경우 자동으로 설정됩니다. SDK의 경우 시스템 변수를 수정하고 값을 변경하면됩니다. JAVA_HOME

다른 팁

대신 Java 설치 프로그램에서 설정 한 변수를 사용하십시오.

set path="%path%;%JAVA_HOME%\bin"

다음 PowerShell 스크립트는 이에 매우 잘 작동합니다.

Remove-PathFolders -Folders "*\Java\jdk*" -EnvironmentVariableTarget $([System.EnvironmentVariableTarget]::Machine)
$jdkDp = (Get-ChildItem -Path "C:\Program Files (x86)\Java\jdk*" | Sort-Object name | Select-Object -Last 1).FullName
Add-PathFolders -Folders $($jdkDp + "\bin\") -EnvironmentVariableTarget $([System.EnvironmentVariableTarget]::Machine)
Get-PathFolders -EnvironmentVariableTarget $([System.EnvironmentVariableTarget]::Machine)

영감을 얻은 다음과 같은 사용자 정의 기능을 사용합니다 여기 (모든 것을 동일하게 포함시킬 수 있습니다 UpdateJavaPath.ps1 스크립트):

<#
.SYNOPSIS
Gets the list of folders specified in the Path environment variable.

.PARAMETER EnvironmentVariableTarget
Specifies the "scope" to use when querying the Path environment variable
("Process", "Machine", or "User"). Defaults to "Process" if the parameter is
not specified.

.EXAMPLE
.\Get-PathFolders.ps1
C:\Windows\system32\WindowsPowerShell\v1.0\
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
...

Description
-----------
The output from this example lists each folder in the Path environment variable
for the current process.

.EXAMPLE
.\Get-PathFolders.ps1 User
C:\NotBackedUp\Public\Toolbox

Description
-----------
The output from this example assumes one folder
("C:\NotBackedUp\Public\Toolbox") has previously been added to the user's Path
environment variable.
#>
Function Get-PathFolders() {
    param(
        [string] $EnvironmentVariableTarget = "Process")

    Set-StrictMode -Version Latest
    $ErrorActionPreference = "Stop"

    [string[]] $pathFolders = [Environment]::GetEnvironmentVariable(
        "Path",
        $EnvironmentVariableTarget) -Split ";"

    If ($pathFolders -ne $null)
    {
        Write-Output $pathFolders
    }
}

<#
.SYNOPSIS
Adds one or more folders to the Path environment variable.

.PARAMETER Folders
Specifies the folders to add to the Path environment variable..

.PARAMETER EnvironmentVariableTarget
Specifies the "scope" to use for the Path environment variable ("Process",
"Machine", or "User"). Defaults to "Process" if the parameter is not specified.

.EXAMPLE
.\Add-PathFolders.ps1 C:\NotBackedUp\Public\Toolbox
#>
Function Add-PathFolders() {
    param(
        [parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string[]] $Folders,
        [string] $EnvironmentVariableTarget = "Process")

    begin
    {
        Set-StrictMode -Version Latest
        $ErrorActionPreference = "Stop"

        Write-Verbose "Path environment variable target: $EnvironmentVariableTarget"

        [bool] $isInputFromPipeline =
            ($PSBoundParameters.ContainsKey("Folders") -eq $false)

        [int] $foldersAdded = 0

        [string[]] $pathFolders = [Environment]::GetEnvironmentVariable(
            "Path",
            $EnvironmentVariableTarget) -Split ";"

        [Collections.ArrayList] $folderList = New-Object Collections.ArrayList

        $pathFolders | foreach {
            $folderList.Add($_) | Out-Null
        }
    }

    process
    {
        If ($isInputFromPipeline -eq $true)
        {
            $items = $_
        }
        Else
        {
            $items = $Folders
        }

        $items | foreach {
            [string] $folder = $_

            [bool] $isFolderInList = $false

            $folderList | foreach {
                If ([string]::Compare($_, $folder, $true) -eq 0)
                {
                    Write-Verbose ("The folder ($folder) is already included" `
                        + " in the Path environment variable.")

                    $isFolderInList = $true
                    return
                }
            }

            If ($isFolderInList -eq $false)
            {
                Write-Verbose ("Adding folder ($folder) to Path environment" `
                    + " variable...")

                $folderList.Add($folder) | Out-Null

                $foldersAdded++
            }
        }
    }

    end
    {
        If ($foldersAdded -eq 0)
        {
            Write-Verbose ("No changes to the Path environment variable are" `
                + " necessary.")

            return
        }

        [string] $delimitedFolders = $folderList -Join ";"

        [Environment]::SetEnvironmentVariable(
            "Path",
            $delimitedFolders,
            $EnvironmentVariableTarget)

        Write-Verbose ("Successfully added $foldersAdded folder(s) to Path" `
            + " environment variable.")
    }
}

<#
.SYNOPSIS
Removes one or more folders from the Path environment variable.

.PARAMETER Folders
Specifies the folders to remove from the Path environment variable..

.PARAMETER EnvironmentVariableTarget
Specifies the "scope" to use for the Path environment variable ("Process",
"Machine", or "User"). Defaults to "Process" if the parameter is not specified.

.EXAMPLE
.\Remove-PathFolders.ps1 C:\NotBackedUp\Public\Toolbox
#>
Function Remove-PathFolders(){
    param(
        [parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string[]] $Folders,
        [string] $EnvironmentVariableTarget = "Process")

    begin
    {
        Set-StrictMode -Version Latest
        $ErrorActionPreference = "Stop"

        Write-Verbose "Path environment variable target: $EnvironmentVariableTarget"

        [bool] $isInputFromPipeline =
            ($PSBoundParameters.ContainsKey("Folders") -eq $false)

        [int] $foldersRemoved = 0

        [string[]] $pathFolders = [Environment]::GetEnvironmentVariable(
            "Path",
            $EnvironmentVariableTarget) -Split ";"

        [Collections.ArrayList] $folderList = New-Object Collections.ArrayList

        $pathFolders | foreach {
            $folderList.Add($_) | Out-Null
        }
    }

    process
    {
        If ($isInputFromPipeline -eq $true)
        {
            $items = $_
        }
        Else
        {
            $items = $Folders
        }

        $items | foreach {
            [string] $folder = $_

            [bool] $isFolderInList = $false

            for ([int] $i = 0; $i -lt $folderList.Count; $i++)
            {
                #If ([string]::Compare($folderList[$i], $folder, $true) -eq 0)
                if (($folderList[$i] -like $folder) -or ($folderList[$i] -eq ""))
                {
                    $isFolderInList = $true

                    Write-Verbose ("Removing folder ($folderList[$i]) from Path" `
                        + " environment variable...")

                    $folderList.RemoveAt($i)
                    $i--

                    $foldersRemoved++
                }
            }

            If ($isFolderInList -eq $false)
            {
                Write-Verbose ("The folder ($folder) is not specified in the Path" `
                    + " list.")

            }
        }
    }

    end
    {
        If ($foldersRemoved -eq 0)
        {
            Write-Verbose ("No changes to the Path environment variable are" `
                + " necessary.")

            return
        }

        [string] $delimitedFolders = $folderList -Join ";"

        [Environment]::SetEnvironmentVariable(
            "Path",
            $delimitedFolders,
            $EnvironmentVariableTarget)

        Write-Verbose ("Successfully removed $foldersRemoved folder(s) from Path" `
            + " environment variable.")
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top