javac no se reconoce como un comando interno o externo, programa operativo o archivo por lotes [cerrado]

253

Estoy experimentando un error al intentar compilar programas Java.

Estoy en Windows (este es un problema específico de Windows) y tengo instalado el último JDK.

He intentado una solución que involucra la PATHvariable, pero el error persiste.

Salida de consola:

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.
usuario987137
fuente
77
Creo que tu camino no está establecido. vaya a su entorno variable y establezca su camino
Ron
2
Esta pregunta parece estar fuera de tema porque se puede encontrar fácilmente en las instrucciones reales de instalación de JDK y la respuesta allí es actualizada y de mayor calidad que cualquier respuesta aquí. También está fácilmente disponible, para todas las plataformas, en el primer capítulo del tutorial oficial de inicio .
Jason C
8
Ta para la información Jason C. Pero confieso que creo que la decisión de llamar a este tema fuera de tema parece estar en desacuerdo con la cantidad de otros que han respondido esta respuesta. Como estoy a punto de hacer.
Matt Stevens
Agregar una nueva variable es más fácil y una vez que cree una nueva variable "RUTA" asegúrese de agregar punto y coma (;) y el final del valor.
Amir Md Amiruzzaman

Respuestas:

434

TL; DR

Para lectores experimentados:

  1. Encuentra la ruta de Java; se parece a esto:C:\Program Files\Java\jdkxxxx\bin\
  2. El menú de inicio busca "variable de entorno" para abrir el cuadro de diálogo de opciones.
  3. Examinar PATH. Eliminar viejos caminos de Java.
  4. Agregue la nueva ruta de Java a PATH.
  5. Editar JAVA_HOME.
  6. Cierre y vuelva a abrir la consola / IDE.

¡Bienvenidos!

Te has encontrado con uno de los problemas técnicos más notorios que enfrentan los principiantes de Java: el 'xyz' is not recognized as an internal or external command...mensaje de error.

En pocas palabras, no ha instalado Java correctamente . Finalizar la instalación de Java en Windows requiere algunos pasos manuales. Siempre debe realizar estos pasos después de instalar Java, incluso después de actualizar el JDK.

Variables de entorno y PATH

(Si ya comprende esto, no dude en saltarse las siguientes tres secciones).

Cuando ejecuta javac HelloWorld.java, cmd debe determinar dónde javac.exese encuentra. Esto se logra con PATHuna variable de entorno.

Una variable de entorno es un par clave-valor especial (p windir=C:\WINDOWS. Ej .). La mayoría viene con el sistema operativo, y algunos son necesarios para el funcionamiento adecuado del sistema. Una lista de ellos se pasa a cada programa (incluido cmd) cuando se inicia. En Windows , hay dos tipos : variables de entorno del usuario y variables de entorno del sistema .

Puede ver sus variables de entorno de esta manera:

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

La variable más importante es PATH. Es una lista de caminos, separados por ;. Cuando se ingresa un comando en cmd, cada directorio de la lista se escaneará en busca de un ejecutable coincidente.

En mi computadora, PATHes:

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

Cuando ejecuta javac HelloWorld.java, cmd, al darse cuenta de que javacno es un comando interno , busca en el sistema PATHseguido por el usuarioPATH . Entra mecánicamente cada directorio en la lista, y comprueba si javac.com, javac.exe, javac.bat, etc. está presente. Cuando lo encuentra javac, lo ejecuta. Cuando no lo hace, imprime'javac' is not recognized as an internal or external command, operable program or batch file.

Debe agregar el directorio de ejecutables de Java a PATH.

JDK vs. JRE

(Si ya comprende esto, no dude en omitir esta sección).

Al descargar Java, se le ofrece una opción entre:

  • El Java Runtime Environment (JRE), que incluye las herramientas necesarias para ejecutar programas Java, pero no para compilar nuevos, contiene javapero no contiene javac.
  • El Kit de desarrollo de Java (JDK), que contiene ambos javay javac, junto con una serie de otras herramientas de desarrollo. El JDK es un superconjunto del JRE.

Debe asegurarse de haber instalado el JDK . Si solo instaló el JRE, no puede ejecutarlo javacporque no tiene una instalación del compilador Java en su disco duro. Verifique su lista de programas de Windows y asegúrese de que el nombre del paquete Java incluya las palabras "Kit de desarrollo".

No usar set

(Si no planeaba hacerlo de todos modos, no dude en omitir esta sección).

Varias otras respuestas recomiendan ejecutar alguna variación de:

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

No hagas eso. Hay varios problemas importantes con ese comando:

  1. Este comando borra todo lo demás desde PATHy lo reemplaza con la ruta de Java. Después de ejecutar este comando, puede encontrar varios otros comandos que no funcionan.
  2. Probablemente su ruta de Java no seaC:\Program Files\Java\jdk1.7.0_09\bin , casi definitivamente tiene una versión más nueva del JDK, que tendría una ruta diferente.
  3. Lo nuevo PATH solo se aplica a la sesión de cmd actual. Tendrá que volver a ingresar el setcomando cada vez que abra el símbolo del sistema.

Los puntos 1 y 2 se pueden resolver con esta versión un poco mejor:

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

Pero es solo una mala idea en general.

Encuentra la ruta de Java

La forma correcta comienza con encontrar dónde ha instalado Java. Esto depende de cómo haya instalado Java.

Insta instalador

Ha instalado Java ejecutando un programa de instalación. El instalador de Oracle coloca versiones de Java debajo de C:\Program Files\Java\(o C:\Program Files (x86)\Java\). Con el Explorador de archivos o el Símbolo del sistema, navegue a ese directorio.

Cada subcarpeta representa una versión de Java. Si solo hay uno, lo has encontrado. De lo contrario, elija el que se parece a la versión más nueva. Asegúrese de que el nombre de la carpeta comience por jdk(en lugar de jre). Ingrese el directorio.

Luego ingrese el bindirectorio de eso.

Ahora estás en el directorio correcto. Copia el camino. Si está en el Explorador de archivos, haga clic en la barra de direcciones. Si está en el símbolo del sistema, copie el mensaje.

La ruta de Java resultante debe tener la forma de (sin comillas):

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

Archivo zip

Has descargado un archivo .zip que contiene el JDK. Extraerlo a un lugar aleatorio donde no se interponga en tu camino; C:\Java\Es una elección aceptable.

Luego ubique la bincarpeta en algún lugar dentro de ella.

Ahora estás en el directorio correcto. Copia su camino. Esta es la ruta de Java.

Recuerde no mover nunca la carpeta, ya que eso invalidaría la ruta.

Abrir el cuadro de diálogo de configuración

Ese es el diálogo para editar PATH. Existen numerosas formas de llegar a ese cuadro de diálogo, dependiendo de su versión de Windows, la configuración de la interfaz de usuario y de lo desordenada que sea la configuración de su sistema.

Pruebe algunos de estos:

  • Menú Inicio / cuadro de búsqueda de la barra de tareas »buscar" variable de entorno "
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe» Variables de entorno
  • Explorador de archivos »escriba en la barra de direcciones Control Panel\System and Security\System» Configuración avanzada del sistema (extremo izquierdo, en la barra lateral) »Variables de entorno
  • Escritorio »haga clic con el botón derecho en Esta PC» Propiedades »Configuración avanzada del sistema» Variables de entorno
  • Menú Inicio »haga clic con el botón derecho en Equipo» Propiedades »Configuración avanzada del sistema» Variables de entorno
  • Panel de control (modo icono) »Sistema» Configuración avanzada del sistema »Variables de entorno
  • Panel de control (modo de categoría) »Sistema y seguridad» Sistema »Configuración avanzada del sistema» Variables de entorno
  • Escritorio »haga clic con el botón derecho en Mi PC» Avanzado »Variables de entorno
  • Panel de control »Sistema» Avanzado »Variables de entorno

Cualquiera de estos debe llevarlo al cuadro de diálogo de configuración correcto.

Si tiene Windows 10, Microsoft lo ha bendecido con una nueva y elegante interfaz de usuario para editar PATH. De lo contrario, verá PATHen toda su gloria incrustada en punto y coma, apretada en un cuadro de texto de una sola línea. Haz tu mejor esfuerzo para hacer las ediciones necesarias sin romper tu sistema.

Limpiar PATH

Mira PATH. Casi definitivamente tiene dos PATHvariables (debido a las variables de entorno del usuario frente al sistema). Tienes que mirar a los dos.

Busque otras rutas de Java y elimínelas. Su existencia puede causar todo tipo de conflictos. (Por ejemplo, si tiene JRE 8 y JDK 11 en PATHese orden, javacinvocará el compilador Java 11, que creará .classarchivos de la versión 55 , pero javainvocará Java 8 JVM, que solo admite hasta la versión 52, y experimentará errores de versión no compatibles y no podrá compilar ni ejecutar ningún programa). Evite estos problemas asegurándose de que solo tenga una ruta de Java PATH. Y mientras lo hace, también puede desinstalar versiones antiguas de Java . Y recuerde que no necesita tener un JDK y un JRE.

Si es así C:\ProgramData\Oracle\Java\javapath, elimínalo también . Oracle tenía la intención de resolver el problema de las rutas de Java que se rompen después de las actualizaciones creando un enlace simbólico que siempre apunte a la última instalación de Java. Desafortunadamente, a menudo termina apuntando a la ubicación incorrecta o simplemente no funciona . Es mejor eliminar esta entrada y administrar manualmente la ruta de Java.

Ahora también es una buena oportunidad para realizar tareas generales de limpieza PATH. Si tiene rutas relacionadas con el software que ya no está instalado en su PC, puede eliminarlas. También puede barajar el orden de los caminos (si le importan cosas como esas).

añadir PATH

Ahora tome la ruta de Java que encontró hace tres pasos y colóquela en el sistema PATH.

No debería importar en qué lugar de la lista vaya su nuevo camino; colocarlo al final es una buena elección.

Si está utilizando la interfaz de usuario anterior a Windows 10, asegúrese de haber colocado los puntos y comas correctamente. Debe haber exactamente uno que separe cada ruta en la lista.

Realmente no hay mucho más que decir aquí. Simplemente agregue la ruta PATHy haga clic en Aceptar.

Conjunto JAVA_HOME

Mientras lo hace, también puede configurarlo JAVA_HOME. Esta es otra variable de entorno que también debe contener la ruta de Java. Muchos programas Java y no Java, incluidos los populares sistemas de compilación Java Maven y Gradle , arrojarán errores si no se configuran correctamente.

Si JAVA_HOMEno existe, créelo como una nueva variable de entorno del sistema. Ajústelo a la ruta del directorio Java sin el bin/directorio, es decir C:\Program Files\Java\jdkxxxx\.

Recuerde editar también JAVA_HOMEdespués de actualizar Java.

Cerrar y volver a abrir el símbolo del sistema

Aunque ha modificado PATH, todos los programas en ejecución, incluido cmd, solo ven los antiguos PATH. Esto se debe a que la lista de todas las variables de entorno solo se copia en un programa cuando comienza a ejecutarse; a partir de entonces, solo consulta la copia en caché.

No hay una buena manera de actualizar las variables de entorno de cmd , así que simplemente cierre el símbolo del sistema y ábralo nuevamente. Si está utilizando un IDE, ciérrelo y vuelva a abrirlo también.

Ver también

carlos c.
fuente
77
Esto funcionó para mí, pero antes había intentado agregar la ubicación al final de la cadena Path. ¿Por qué solo funciona al principio?
Eric H.
44
¡Gracias! esto funciona para mi! @Eric H: Agregar al final funciona para mí. Por lo que entiendo, pasa por la ruta de izquierda a derecha y busca javac.exe. Entonces, tal vez lo tenga en algún directorio que esté en el frente y que javac.exe no funcione.
Dao Lam el
36
+1 por cerrar la línea de comandos y luego volver a abrirla, ¡eso funcionó para mí!
Sameh Deabes
¿Tiene sentido si tengo una versión diferente de jdk y jre en mi computadora?
Aaron Liu
Aprendí muchas cosas sobre el sistema operativo mientras configuraba estas variables y todo eso. gracias hombre
Aniket Jadhav
77

intente esto ... yo también lo tuve pero ahora se resolvió en XP ...

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

Escribiste mal el setcomando, perdiste la barra invertida después C:. Debería ser:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Raghuram
fuente
1
Perdí ese derecho, pero ese fue mi error tipográfico cuando publiqué mi preocupación aquí. Lo revisé y todo está escrito correctamente, pero aún me da el mismo error.
user987137
1
@ user987137. Evidentemente, algo es incorrecto. ¿Está instalado JDK (tenga en cuenta que JDK no es JRE) en la ubicación especificada C:\Program Files (x86)\Java\jdk1.7.0? Si es así, ¿qué sucede si lo haces cd C:\Program Files (x86)\Java\jdk1.7.0\biny luego javac -version?
Raghuram
3
Tuve el mismo error al configurar JDK en Win XP a pesar de que tenía la ruta correcta establecida. Simplemente cerrando el símbolo del sistema y abriéndolo nuevamente lo reparó.
Chris J
@ChrisJ: esto se debe a que el nuevo símbolo del sistema se iniciará en una nueva sesión y, por lo tanto, también cargará las variables ambientales actualizadas.
Cyclonecode el
17

Ejecute lo siguiente desde el símbolo del sistema: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" o set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

He intentado esto y funciona bien.

novato
fuente
gracias, esto funcionó en Windows
Csaba
Buena respuesta. Trabajó para mí en Windows 10
Roger
5

Si el comando java funciona y tiene problemas con javac. luego primero verifique que el archivo javac.exe del directorio bin de jdk esté allí o no. Si existe el archivo javac.exe, configúrelo JAVA_HOMEcomo variable del sistema.

Umrao Rawat
fuente
3

Verifique sus variables de entorno.

En mi caso, tenía JAVA_HOME configurado en las variables del sistema , así como en las variables de mi cuenta de usuario y este último se configuró en una versión incorrecta de Java . También tuve el mismo problema con la variable Path.

Después de eliminar JAVA_HOME de las variables de mi cuenta de usuario y eliminar la ruta incorrecta de la variable Ruta, funcionó correctamente.

wabisabit
fuente