O Windows ignora JAVA_HOME: como definir JDK como padrão?

90

Como faço para persuadir o Windows a usar o JDK em vez de um JRE?

Esta pergunta já foi feita antes, aqui e em outros lugares:

Como defino a instalação / tempo de execução padrão do Java (Windows)?

O problema é que o Windows ignora JAVA_HOMEe também ignora o fato de que fiz do diretório bin do JDK a primeira entrada no caminho.

Quando executo a java -versionpartir da linha de comando, em vez de invocar minha instalação do JDK 1.6, ele executa o 1.7 JRE.

Meu palpite é que este é um problema específico do 1.7 e o Windows 7 está fazendo algo que não deveria com o registro.

Alguma ideia de como consertar isso?

Editar : Oops. Eu escrevi "primeira entrada no caminho de classe" acima, quando quis dizer "caminho". Desculpa.

ccleve
fonte

Respostas:

134

No Windows, o javaexecutável usa o Registro do Windows para localizar a versão padrão do Java a ser executada.

A cópia de java.exeto run é encontrada usando a PATHvariável de ambiente. A menos que você tome medidas para mudar isso, por padrão, uma cópia será encontrada no diretório do Windows. Como essa cópia não está em um diretório de tempo de execução Java, ela localiza um olhando para o registro.

Portanto, você precisa modificar o registro ou colocar a versão do Java desejada antes do diretório do Windows em seu PATH.

Erickson
fonte
11
OP aqui. Veja minha edição acima. Sim, isso resolveu. Duas notas: primeiro, parece que o instalador Java realmente colocou java.exe em Windows \ System32. Isso é surpreendente para mim. Em segundo lugar, ao modificar o caminho em Computador / Propriedades / Configurações avançadas do sistema / Variáveis ​​de ambiente, você deve modificar o caminho do sistema , não o caminho do usuário . O caminho do sistema se coloca em primeiro lugar.
ccleve
2
Também destacarei o ponto do user237815 de que parece que o instalador Java realmente instala seu java.exe em Windows \ System32. Isso certamente não foi intuitivo para mim. Somente depois de verificar a "versão do java" em um console, ganhei algum nível de conforto de que o Windows agora estava usando o java.exe que eu queria da minha instalação do JDK, em vez de alguma versão anterior indesejada.
John Tobler
17
O problema também foi resolvido no meu caso, renomeando java.exe, javaw.exe e javaws.exe na minha pasta Windows / System32. Então, e somente então, java -version mostra a versão que está configurada em JAVA_HOME e o PATH
Inversus
6
Você salvou meu dia! Mover a entrada relacionada ao JDK antes do Windows no PATH resolveu o problema. Muito obrigado!
the_dark_destructor de
9
Coloquei %JAVA_HOME%\binna primeira posição da pathvariável no Windows 10 e trabalho para mim.
Wendel
31

No Windows 8, você pode querer remover o C:\ProgramData\Oracle\Java\javapath diretório.

do caminho

Isso resolveu meu problema.

Uma corrida
fonte
5
No Windows 10, é: C: \ Arquivos de programas (x86) \ Arquivos comuns \ Oracle \ Java \ javapath. Isso é adicionado automaticamente à variável de caminho do sistema. Exclua isso e defina seu local de caminho personalizado.
Dexter
1
o comentário acima ajudou no caso do Windows 10
Saba Ahang
24

eu tenho esse problema também. Estou executando o 1.6, mas quero construir o código no qual estou trabalhando com o 1.5. Eu mudei o JAVA_HOMEe PATH(usuário e sistema) sem sucesso.

A resposta é que o instalador para 1,6 cair java.exe, javaw.exee javaws.exena minha Windows\System32pasta (Windows 7).

Eu resolvi renomeando os arquivos para java_wrong.exe, javaw_wrong.exe, e javaws_wrong.exe. Só depois de fazer isso, ele pega a versão correta do java, conforme definido em JAVA_HOMEe PATH. Eu renomei os arquivos desta forma porque os exclui de uma maneira facilmente reversível.

Espero que isto ajude!

Inversus
fonte
10
Em vez de renomear, você pode modificar a variável PATH especificando como primeiro valor% JAVA_HOME% \ bin, dessa forma seria o primeiro valor que levará
maxivis
1
Obrigado @maxivis. Acho que o problema pode ter sido a ordem dos elementos PATH, de forma que Windows \ System32 era antes de JAVA_HOME. Eu simplesmente os renomeei para que fossem excluídos de forma reversível.
Inversus
De alguma forma, definir JAVA_HOME no caminho não estava funcionando de forma alguma para mim, este realmente resolveu.
Guilherme Orioli
13

O Windows não ignora nada. Este é um problema com sua configuração; O Windows usa apenas o que você fornece. Não tem nenhum conhecimento especial de JAVA_HOME.

CLASSPATHtambém não tem nada a ver com o Windows. Para o Windows, é apenas uma variável de ambiente que é expandida para um local de pasta.

Verifique sua %PATH%variável ambiental. É o que faz o Windows encontrar um antes do outro. O caminho (conforme a postagem que você vinculou disse) deve apontar %JAVA_HOME%\bin;<remainder of path>. Novamente, o post ao qual você criou um link oferece uma maneira de definir isso usando um arquivo em lote.

(Para outras pessoas que talvez não saibam disso: a maneira mais fácil de inspecionar% PATH% é abrir um prompt de comando e digitar echo %PATH%. Você também pode acessá-lo clicando com o botão direito do mouse no Computerpainel direito do menu Iniciar e escolhendo Properties, então Advanced System Settings, e o Environmental Variablesbotão tne .)

Ken White
fonte
@erickson: OK. Obrigado - vou corrigir isso. Ainda não tem nada a ver com o Windows, porém, esse foi o ponto da minha resposta. :)
Ken White
Entendido, eu só estava preocupado que um novo equívoco pudesse ser criado; Java não sabe nada mais do JAVA_HOMEque o Windows.
Erickson
Agradeço a correção. Não sou um especialista em Java (experiência limitada até agora), então é bom saber para referência futura.
Ken White
1
JAVA_HOMEdeve ser definido como a raiz da instalação do java. O caminho deve ter %JAVA_HOME%\bin;&lt;remainder of path%gt;, caso contrário, você acabará não "encontrando" java, javac, etc. Claro, o Windows só realmente olha para a PATHvariável, mas algumas ferramentas relacionadas a java olham JAVA_HOMEocasionalmente.
Edwin Buck
@Edwin: Corrigido o que faltava \bintambém. Obrigado.
Ken White
6

Eu tive o mesmo problema. Tenho várias versões do Java instaladas e, por algum motivo, o Java 1.7 estava sendo usado em vez do Java 1.6, embora eu tenha especificado no caminho para usar o 1.6 (C: \ jdk1.6.0_45_32 \ bin).

Tive que mover o caminho do JDK que queria usar (1.6) para ser a primeira entrada na variável de ambiente PATH para garantir que o Windows use 1.6 em vez de 1.7.

Então, por exemplo, a variável de ambiente PATH antes era:

C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin;C:\jdk1.6.0_45_32\bin

e depois que movi o jdk para ser o primeiro, funcionou:

C:\jdk1.6.0_45_32\bin;C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin

Acho que o instalador do Windows do Java 1.7 o instalou em algum outro diretório já no PATH, sendo usado primeiro em vez da entrada PATH personalizada especificada C: \ jdk1.6.0_45_32 \ bin;

eternalminerals.com
fonte
obrigado mano. Mover o caminho JAVA_HOME \ bin como primeiro elemento da variável Path salvou minha vida.
ÖMER TAŞCI
4

Para o meu caso na 'Path'variável, foi adicionado um parâmetro como ' C:\ProgramData\Oracle\Java\javapath;'. Este local estava tendo java.exe, javaw.exee javaws.exede java 8 que é recentemente instalado via jdk.exeOracle.

Eu removi este texto de Path onde meu Path já %JAVA_HOME%\binestava com ele.

Agora, a variável 'JAVA_HOME'está controlando minha versão do Java que eu queria.

Muhammadh Aadhil
fonte
4

insira a descrição da imagem aquiSuponha que você tenha instalado o JDK 10 após o JDK 8 e na variável de ambiente do sistema defina o caminho como "C: \ ProgramData \ Oracle \ Java \ javapath" e controle de versão do Java por este caminho. ele irá ignorar JAVA_HOME mesmo o caminho jdk 1.8 definido aqui Portanto, remova "C: \ ProgramData \ Oracle \ Java \ javapath" no caminho para obter efeito do caminho JAVA_HOME

Samir 007
fonte
2

Defina a variável de ambiente Path para o diretório jdk / bin desejado

David Levin
fonte
2

Eu tinha o Java 7 e 8 instalado e quero redirecionar para o java 7, mas a versão do java na minha janela de prompt do cmd mostra o Java 8.
Adicionado o caminho do diretório bin do Java 7 ( C: \ Program Files \ Java \ jdk1.7.0_10 \ bin ) para a variável PATH no final, mas não deu certo e mostra Java 8. Então eu mudei o caminho do Java 7 para o início do valor do caminho e funcionou.
Abri uma nova janela de prompt do cmd e verifiquei minha versão java e agora mostra Java 7

mannedear
fonte
1

No meu caso, eu tinha Java 7 e 8 (ambos x64) instalados e quero redirecionar para java 7, mas tudo está configurado para usar Java 8. Java usa a variável de ambiente PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

como a primeira opção para procurar seu tempo de execução de pasta (é uma pasta oculta). Este caminho contém 3 links simbólicos que não podem ser editados.

No meu pc, a variável de ambiente PATH se parece com isto:

C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ System32; C: \ Arquivos de programas \ Java \ jdk1.7.0_21 \ bin;

No meu caso, deve ser assim:

C: \ Windows \ System32; C: \ Arquivos de programas \ Java \ jdk1.7.0_21 \ bin;

Tive que recortar e colar os links simbólicos em outro lugar para que o java não pudesse localizá-los e eu pudesse restaurá-los mais tarde.

Depois de definir as variáveis ​​de ambiente JAVA_HOME e JRE_HOME para os tempos de execução das pastas java desejadas (no meu caso, é Java 7), o comando java -versiondeve mostrar o tempo de execução java desejado. Observo que não há necessidade de mexer no registro.

Testado em Win7 x64.

Janela quebrada
fonte
1

Este problema é provavelmente devido às versões anteriores do Java instaladas em seu sistema. Primeiro verifique suas variáveis ​​de ambiente com cuidado e remova todas as variáveis ​​de ambiente relacionadas às versões anteriores de JAVA e substitua esses caminhos para

C:\Program Files\Java\<your new jdk version>\bin
Tanay Toshniwal
fonte
0

Há um fator adicional aqui; além dos executáveis ​​java que a instalação do java coloca onde quer que você os peça para colocá-los, no windows, o instalador do java também coloca cópias de alguns desses executáveis ​​no diretório system32 do Windows, então você provavelmente usará qual era cada executável do java instalado mais recentemente.

Ben Brammer
fonte
0

Por precaução, se você estiver usando o arquivo .BAT como serviço do Windows, sugiro desinstalar o serviço do Windows e reinstalá-lo novamente após alterar o% JAVA_HOME% para apontar para a versão correta do Java.

Aurun
fonte
0

Depois de lutar com esse problema por algum tempo e pesquisar sobre ele, finalmente consegui resolvê-lo seguindo estas etapas:

1) instale o jdk versão 12
2) Crie uma nova variável na variável de sistema
3) Nomeie-o como JAVA_HOME e forneça o caminho de instalação do jdk
4) adicione essa variável no caminho e mova-a para o topo.
5) vá para C: \ Arquivos de programas (86) \ Arquivos comuns \ Oracle \ Java \ javapath e substitua java.exe e javaw.exe pelos arquivos correspondentes com os mesmos nomes da pasta pathtojavajdk / bin

Finalmente, verifiquei a versão padrão do java em cmd com "java -version" e funcionou!

Rodrigo Araujo
fonte
0

Eu tive o mesmo problema, nas configurações das variáveis ​​de ambiente do usuário eu estava configurando JAVA_HOME e PATH corretamente, mas não funcionou. Conforme eu atualizo minhas variáveis ​​de ambiente do sistema, ele começa a funcionar.

sunleo
fonte