O javac não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote [fechado]

253

Estou com um erro ao tentar compilar programas Java.

Estou no Windows (esse é um problema específico do Windows) e tenho o JDK mais recente instalado.

Eu tentei uma solução envolvendo a PATHvariável, mas o erro persiste.

Saída do console:

C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.java
'javac' is not recognized as an internal or external command,
operable program or batch file.
user987137
fonte
7
Eu acho que seu caminho não está definido. vá para o seu caminho enviromentvariable e definir suas
Ron
2
Esta pergunta parece estar fora do tópico, pois é facilmente encontrada nas instruções de instalação reais do JDK e a resposta é atualizada e de qualidade superior a qualquer resposta aqui. Também está prontamente disponível, para todas as plataformas, no primeiro capítulo do tutorial oficial de introdução .
Jason C #
8
Ta pela informação Jason C. Mas confesso que acho que a decisão de chamar esse tópico de fora do tópico parece estar em desacordo com o número de outros que sugeriram essa resposta. Como estou prestes a fazer.
Matt Stevens
Adicionar uma nova variável é mais fácil e, depois de criar uma nova variável "PATH", adicione ponto-e-vírgula (;) e o final do valor.
Amir Md Amiruzzaman

Respostas:

434

TL; DR

Para leitores experientes:

  1. Encontre o caminho do Java; Se parece com isso:C:\Program Files\Java\jdkxxxx\bin\
  2. No menu Iniciar, procure por "variável de ambiente" para abrir a caixa de diálogo de opções.
  3. Examinar PATH . Remova os caminhos Java antigos.
  4. Adicione o novo caminho Java ao PATH .
  5. Editar JAVA_HOME .
  6. Feche e abra novamente o console / IDE.

Bem-vinda!

Você encontrou um dos problemas técnicos mais notórios enfrentados pelos iniciantes em Java: o 'xyz' is not recognized as an internal or external command... mensagem de erro.

Em poucas palavras, você não instalou o Java corretamente . A finalização da instalação do Java no Windows requer algumas etapas manuais. Você sempre deve executar estas etapas após instalar o Java, inclusive após atualizar o JDK.

Variáveis ​​de ambiente e PATH

(Se você já entendeu isso, fique à vontade para pular as próximas três seções.)

Quando você executa javac HelloWorld.java, o cmd deve determinar onde javac.exeestá localizado. Isso é realizado com PATHuma variável de ambiente.

Uma variável de ambiente é um par de valor-chave especial (por exemplo windir=C:\WINDOWS). A maioria veio com o sistema operacional e alguns são necessários para o funcionamento adequado do sistema. Uma lista deles é passada para todos os programas (incluindo o cmd) quando é iniciado. No Windows , existem dois tipos : variáveis ​​de ambiente do usuário e variáveis ​​de ambiente do sistema .

Você pode ver suas variáveis ​​de ambiente assim:

C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\craig\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
...

A variável mais importante é PATH. É uma lista de caminhos, separados por; . Quando um comando é inserido no cmd, cada diretório da lista será verificado em busca de um executável correspondente.

No meu computador, PATHé:

C:\>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower
Shell\v1.0\;C:\ProgramData\Microsoft\Windows\Start Menu\Programs;C:\Users\craig\AppData\
Roaming\Microsoft\Windows\Start Menu\Programs;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\
msys64\mingw32\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\
craig\AppData\Local\Yarn\bin;C:\Program Files\Java\jdk-10.0.2\bin;C:\ProgramFiles\Git\cmd;
C:\Program Files\Oracle\VirtualBox;C:\Program Files\7-Zip\;C:\Program Files\PuTTY\;C:\
Program Files\launch4j;C:\Program Files (x86)\NSIS\Bin;C:\Program Files (x86)\Common Files
\Adobe\AGL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\iCLS Client\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\iCLS
Client\;C:\Users\craig\AppData\Local\Microsoft\WindowsApps

Quando você executa javac HelloWorld.java, o cmd, ao perceber que javacnão é um comando interno , pesquisa o sistema PATHseguido pelo usuárioPATH . Ele entra mecanicamente cada diretório na lista, e verifica se javac.com, javac.exe, javac.bat, etc. está presente. Quando encontra javac, executa. Quando não, ele imprime'javac' is not recognized as an internal or external command, operable program or batch file.

Você deve adicionar o diretório executável Java ao PATH .

JDK vs. JRE

(Se você já entendeu isso, sinta-se à vontade para pular esta seção.)

Ao baixar Java, você pode escolher entre:

  • O Java Runtime Environment (JRE), que inclui as ferramentas necessárias para executar programas Java, mas não para compilar novos - ele contém, javamas nãojavac .
  • O Java Development Kit (JDK), que contém ambos javae javac, juntamente com um host de outras ferramentas de desenvolvimento. O JDK é um superconjunto do JRE.

Você deve certificar-se de ter instalado o JDK . Se você instalou apenas o JRE, não poderá executar javacporque não possui uma instalação do compilador Java no disco rígido. Verifique sua lista de programas do Windows e verifique se o nome do pacote Java inclui as palavras "Kit de Desenvolvimento".

Não use set

(Se você não estava planejando fazer isso de qualquer maneira, fique à vontade para pular esta seção.)

Várias outras respostas recomendam a execução de algumas variações de:

C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin

Não faça isso. Existem vários problemas importantes com esse comando:

  1. Este comando apaga tudo o resto de PATHe substitui-lo com o caminho Java. Após executar este comando, você poderá encontrar vários outros comandos que não estão funcionando.
  2. Seu caminho Java provavelmente não é C:\Program Files\Java\jdk1.7.0_09\bin - você quase definitivamente possui uma versão mais recente do JDK, que teria um caminho diferente.
  3. O novo PATH se aplica apenas à sessão atual do cmd. Você precisará digitar novamente o setcomando sempre que abrir o prompt de comando.

Os pontos 1 e 2 podem ser resolvidos com esta versão um pouco melhor:

C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%

Mas é apenas uma má ideia em geral.

Encontre o caminho do Java

O caminho certo começa com a localização de onde você instalou o Java. Isso depende de como você instalou o Java.

Instalador Exe

Você instalou o Java executando um programa de instalação. O instalador da Oracle coloca as versões do Java em C:\Program Files\Java\(ou C:\Program Files (x86)\Java\). Com o Explorador de Arquivos ou o Prompt de Comando, navegue para esse diretório.

Cada subpasta representa uma versão do Java. Se houver apenas um, você o encontrou. Caso contrário, escolha o que se parece com a versão mais recente. Verifique se o nome da pasta começa com jdk(ao contrário de jre). Digite o diretório

Em seguida, insira o bindiretório disso.

Agora você está no diretório correto. Copie o caminho. Se no File Explorer, clique na barra de endereço. Se no prompt de comando, copie o prompt.

O caminho Java resultante deve estar na forma de (sem aspas):

C:\Program Files\Java\jdkxxxx\bin\

Arquivo Zip

Você baixou um .zip contendo o JDK. Extraia-o para algum lugar aleatório onde não atrapalhe; C:\Java\é uma escolha aceitável.

Em seguida, localize a binpasta em algum lugar dentro dela.

Agora você está no diretório correto. Copie seu caminho. Este é o caminho do Java.

Lembre-se de nunca mover a pasta, pois isso invalidaria o caminho.

Abra a caixa de diálogo de configurações

Essa é a caixa de diálogo para editar PATH . Existem várias maneiras de acessar esse diálogo, dependendo da versão do Windows, das configurações da interface do usuário e de como está confusa a configuração do sistema.

Experimente alguns destes:

  • Caixa de pesquisa do menu Iniciar / barra de tarefas »procure por" variável de ambiente "
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe » Variáveis ​​de ambiente
  • File Explorer »digite na barra de endereço Control Panel\System and Security\System » Configurações avançadas do sistema (extrema esquerda, na barra lateral) »Variáveis ​​de ambiente
  • Desktop »clique com o botão direito do mouse neste PC» Propriedades »Configurações avançadas do sistema» Variáveis ​​de ambiente
  • Menu Iniciar »clique com o botão direito do mouse em Computador» Propriedades »Configurações avançadas do sistema» Variáveis ​​de ambiente
  • Painel de controle (modo ícone) »Sistema» Configurações avançadas do sistema »Variáveis ​​de ambiente
  • Painel de controle (modo de categoria) »Sistema e segurança» Sistema »Configurações avançadas do sistema» Variáveis ​​de ambiente
  • Desktop »clique com o botão direito do mouse em Meu computador» Avançado »Variáveis ​​de ambiente
  • Painel de controle »Sistema» Avançado »Variáveis ​​de ambiente

Qualquer uma dessas opções deve levá-lo à caixa de diálogo de configurações correta.

Se você estiver no Windows 10, a Microsoft o abençoou com uma nova interface de usuário sofisticada para editar PATH. Caso contrário, você verá PATHtoda a sua glória incrustada em ponto e vírgula, espremida em uma caixa de texto de linha única. Faça o seu melhor para fazer as edições necessárias sem interromper o seu sistema.

Limpar \ limpo PATH

Olhe para PATH. Você quase definitivamente tem duas PATHvariáveis ​​(por causa das variáveis ​​de ambiente do usuário vs. do sistema). Você precisa olhar para os dois.

Verifique outros caminhos Java e remova-os. Sua existência pode causar todo tipo de conflito. (Por exemplo, se você tiver JRE 8 e JDK 11 PATH, nessa ordem, javacchamará o compilador Java 11, que criará .classarquivos da versão 55 , mas javachamará a Java 8 JVM, que suporta apenas a versão 52 e você encontrará erros de versão não suportados e não poderá compilar e executar nenhum programa.) Contorne esses problemas, certificando-se de que você tenha apenas um caminho Java PATH. E enquanto você está nisso, você também pode desinstalar versões antigas do Java . E lembre-se de que você não precisa ter um JDK e um JRE.

Se você tiver C:\ProgramData\Oracle\Java\javapath, remova-o também . A Oracle pretendia resolver o problema dos caminhos Java quebrados após as atualizações, criando um link simbólico que sempre apontava para a instalação mais recente do Java. Infelizmente, muitas vezes acaba apontando para o local errado ou simplesmente não está funcionando . É melhor remover esta entrada e gerenciar manualmente o caminho Java.

Agora também é uma boa oportunidade para executar tarefas domésticas gerais PATH. Se você possui caminhos relacionados ao software que não estão mais instalados no seu PC, é possível removê-los. Você também pode embaralhar a ordem dos caminhos (se você se importa com coisas assim).

adicionar à PATH

Agora pegue o caminho Java que você encontrou há três etapas e coloque-o no sistema PATH.

Não deve importar para onde vai o novo caminho na lista; colocá-lo no final é uma ótima escolha.

Se você estiver usando a interface do usuário anterior ao Windows 10, verifique se colocou os pontos e vírgulas corretamente. Deve haver exatamente um separando todos os caminhos na lista.

Realmente não há muito mais a dizer aqui. Basta adicionar o caminho PATHe clicar em OK.

Conjunto JAVA_HOME

Enquanto você está nisso, você também pode definir JAVA_HOME. Essa é outra variável de ambiente que também deve conter o caminho Java. Muitos programas Java e não Java, incluindo os populares sistemas de compilação Java Maven e Gradle , gerarão erros se não estiverem configurados corretamente.

Se JAVA_HOMEnão existir, crie-o como uma nova variável de ambiente do sistema. Defina-o como o caminho do diretório Java sem o bin/diretório, ou seja C:\Program Files\Java\jdkxxxx\.

Lembre-se de editar JAVA_HOMEdepois de atualizar o Java também.

Feche e abra novamente o prompt de comando

Embora você tenha modificado PATH, todos os programas em execução, incluindo o cmd, apenas veem o antigo PATH. Isso ocorre porque a lista de todas as variáveis ​​de ambiente é copiada apenas em um programa quando ele começa a ser executado; depois disso, ele somente consulta a cópia em cache.

Não há uma boa maneira de atualizar as variáveis ​​de ambiente do cmd , basta fechar o prompt de comando e abri-lo novamente. Se você estiver usando um IDE, feche e abra-o novamente.

Veja também

carlos c.
fonte
7
Isso funcionou para mim, mas antes de tentar adicionar o local no final da string Path. Por que isso só funciona no começo?
Eric H.
4
Obrigado! isso funciona para mim! @ Eric H: Adicionar no final funciona para mim. Pelo que entendi, ele percorre o Path da esquerda para a direita e procura pelo javac.exe. Então, talvez você o tenha em algum diretório que esteja na frente e que o javac.exe não funcione.
Dao Lam
36
+1 para fechar a linha de comando e reabri-la, funcionou para mim!
Sameh Deabes
Faz sentido se eu tiver uma versão diferente do jdk e jre no meu computador?
Aaron Liu
Aprendi muitas coisas sobre o sistema OS enquanto configurava essas variáveis ​​e tudo mais. graças homem
Aniket Jadhav
77

tente isso .. eu também, mas agora ele resolveu no XP ..

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java
Ahmad Azwar Anas
fonte
45

Você digitou errado o setcomando - depois perdeu a barra invertida C:. Deveria ser:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Raghuram
fonte
1
Perdi esse direito, mas esse foi o meu erro tipográfico ao postar minha preocupação aqui. Eu verifiquei e tudo está escrito corretamente, mas ainda me dá o mesmo erro.
user987137
1
@ user987137. Evidentemente, algo está incorreto. O JDK (lembre-se - JDK não JRE) está instalado no local especificado - C:\Program Files (x86)\Java\jdk1.7.0? Se sim, o que acontece se você fizer cd C:\Program Files (x86)\Java\jdk1.7.0\bine depois javac -version?
Raghuram
3
Eu tive o mesmo erro ao configurar o JDK no Win XP, mesmo tendo o caminho correto definido. Simplesmente fechando o prompt de comando e abrindo-o novamente, foi corrigido.
Chris J
@ ChrisJ - Isso ocorre porque o novo prompt de comando será iniciado em uma nova sessão e, portanto, também carregará as variáveis ​​ambientais atualizadas.
Cyclonecode
17

Execute o seguinte no prompt de comando: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" ou set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

Eu tentei isso e funciona bem.

mais fresco
fonte
thx, isso funcionou no Windows
Csaba
Boa resposta. Trabalhou para mim no Windows 10
Roger
5

Se o comando java estiver funcionando e obtendo um problema com o javac. Em seguida, verifique primeiro o arquivo javac.exe do diretório bin do jdk. Se o arquivo javac.exe existir, defina JAVA_HOMEcomo variável do sistema.

Umrao Rawat
fonte
3

Verifique suas variáveis ​​de ambiente.

No meu caso, eu tinha JAVA_HOME definido nas variáveis do sistema , bem como nas variáveis ​​da minha conta de usuário , e o último foi definido para uma versão incorreta do Java . Eu também tive o mesmo problema com a variável Path.

Após excluir JAVA_HOME das variáveis da minha conta de usuário e remover o caminho errado da variável Path, funcionou corretamente.

wabisabit
fonte