Windows ignora JAVA_HOME: ¿cómo configurar JDK como predeterminado?

89

¿Cómo puedo persuadir a Windows para que use el JDK en lugar de un JRE?

Esta pregunta se ha hecho antes, aquí y en otros lugares:

¿Cómo configuro el tiempo de ejecución / instalación de Java predeterminado (Windows)?

El problema es que Windows ignora JAVA_HOMEy también ignora el hecho de que hice que el directorio bin de JDK fuera la primera entrada en la ruta.

Cuando ejecuto java -versiondesde la línea de comandos, en lugar de invocar mi instalación JDK 1.6, ejecuta 1.7 JRE.

Supongo que este es un problema específico de 1.7, y Windows 7 está haciendo algo que no debería hacer con el registro.

¿Alguna idea sobre cómo solucionar este problema?

Editar : Ups. Escribí "primera entrada en el classpath" arriba, cuando quise decir "ruta". Lo siento.

ccleve
fuente

Respuestas:

132

En Windows, el javaejecutable utiliza el Registro de Windows para localizar la versión predeterminada de Java para ejecutar.

La copia de java.exepara ejecutar se encuentra utilizando la PATHvariable de entorno. A menos que tome medidas para cambiar esto, de forma predeterminada se encontrará una copia en el directorio de Windows. Dado que esta copia no está en un directorio de tiempo de ejecución de Java, localiza una mirando el registro.

Por lo tanto, debe modificar el registro o poner la versión de Java que desea antes del directorio de Windows en su PATH.

erickson
fuente
11
OP aquí. Vea mi edición arriba. Sí, eso lo resolvió. Dos notas: primero, parece que el instalador de Java realmente puso java.exe en Windows \ System32. Esto me asombra. En segundo lugar, cuando modifica la ruta en Equipo / Propiedades / Configuración avanzada del sistema / Variables de entorno, debe modificar la ruta del sistema , no la ruta del usuario . La ruta del sistema se pone a sí misma en primer lugar.
Ccleve
2
También subrayaré el punto de user237815 de que parece que el instalador de Java realmente coloca su java.exe en Windows \ System32. Esto ciertamente no fue intuitivo para mí. Solo después de verificar la "versión de java" desde una consola obtuve algún nivel de comodidad de que Windows ahora estaba usando el java.exe que quería de mi instalación de JDK en lugar de alguna versión anterior y no deseada.
John Tobler
17
El problema también se resolvió en mi caso cambiando el nombre de java.exe, javaw.exe y javaws.exe en mi carpeta Windows / System32. Entonces, y solo entonces, java -version muestra la versión que está configurada en JAVA_HOME y el PATH
Inversus
6
¡Salvaste mi día! Mover la entrada relacionada con el JDK antes de Windows en PATH resolvió el problema. Muchas gracias!
the_dark_destructor
9
Pongo %JAVA_HOME%\binen primera posición de pathvariable en Windows 10 y trabajo para mí.
Wendel
30

En Windows 8, es posible que desee eliminar el C:\ProgramData\Oracle\Java\javapath directorio.

desde el camino

Resolvió mi problema.

Arun
fuente
5
En Windows 10, es: C: \ Archivos de programa (x86) \ Archivos comunes \ Oracle \ Java \ javapath. Esto se agrega automáticamente a la variable System Path. Elimine eso y configure su ubicación de ruta personalizada.
Dexter
1
el comentario anterior ayudó en el caso de Windows 10
Saba Ahang
23

Yo también tengo este problema. Estoy ejecutando 1.6 pero quiero compilar el código en el que estoy trabajando con 1.5. He cambiado el JAVA_HOMEy PATH(tanto el usuario como el sistema) en vano.

La respuesta es que el instalador de 1,6 se redujo java.exe, javaw.exey javaws.exeen mi Windows\System32carpeta (Windows 7).

Lo resuelto por cambiar el nombre de los archivos a java_wrong.exe, javaw_wrong.exey javaws_wrong.exe. Solo después de hacer eso, toma la versión correcta de java como se define en JAVA_HOMEy PATH. Cambié el nombre de los archivos porque eso los eliminó de una manera fácilmente reversible.

¡Espero que esto ayude!

Inversus
fuente
10
En lugar de cambiar el nombre, puede modificar la variable PATH especificando como primer valor% JAVA_HOME% \ bin, de esa manera sería el primer valor que tomará
maxivis
1
@maxivis Gracias. Supongo que el problema podría haber sido el orden de los elementos PATH de manera que Windows \ System32 estaba antes de JAVA_HOME. Simplemente los renombré para que se borren efectivamente de manera reversible.
Inversus
De alguna manera, establecer JAVA_HOME en la ruta no funcionaba de ninguna manera para mí, este realmente lo resolvió.
Guilherme Orioli
12

Windows no ignora nada. Este es un problema con su configuración; Windows solo usa lo que usted proporciona. No tiene ningún conocimiento especial de JAVA_HOME.

CLASSPATHtampoco tiene nada que ver con Windows. Para Windows, es solo una variable de entorno que se expande a una ubicación de carpeta.

Verifique su %PATH%variable ambiental. Es lo que hace que Windows encuentre uno antes que el otro. La ruta (como la publicación a la que vinculó dijo) debe apuntar %JAVA_HOME%\bin;<remainder of path>. Nuevamente, la publicación a la que vinculó le dio una forma de configurar esto usando un archivo por lotes.

(Para otros que quizás no sepan esto: la forma más fácil de inspeccionar% PATH% es abrir un símbolo del sistema y escribir echo %PATH%. También puede llegar allí haciendo clic Computerderecho en el panel derecho del menú Inicio y seleccionando Properties, luego Advanced System Settings, y el Environmental Variablesbotón tne .)

Ken White
fuente
@erickson: Está bien. Gracias, lo corregiré. Sin embargo, todavía no tiene nada que ver con Windows, que fue el punto de mi respuesta. :)
Ken White
Entendido, solo me preocupaba que se pudiera crear un nuevo concepto erróneo; Java no sabe nada más JAVA_HOMEque Windows.
erickson
Agradezco la corrección. Yo no soy una persona de Java (experiencia limitada hasta la fecha), por lo que es bueno saberlo para futuras referencias.
Ken White
1
JAVA_HOMEdebe establecerse en la raíz de la instalación de Java. La ruta debería haberlo hecho %JAVA_HOME%\bin;&lt;remainder of path%gt;, de lo contrario terminará sin "encontrar" java, javac, etc. Por supuesto, Windows realmente solo mira la PATHvariable, pero algunas herramientas relacionadas con java miran en JAVA_HOMEocasiones.
Edwin Buck
@Edwin: Se corrigió lo que faltaba \bintambién. Gracias.
Ken White
6

Tuve el mismo problema. Tengo un montón de versiones de Java instaladas y, por alguna razón, se estaba usando Java 1.7 en lugar de Java 1.6, aunque especifiqué en la ruta para usar 1.6 (C: \ jdk1.6.0_45_32 \ bin).

Tuve que mover la ruta del JDK que quería usar (1.6) para que fuera la primera entrada en la variable de entorno PATH para asegurarme de que Windows usa 1.6 en lugar de 1.7.

Entonces, por ejemplo, la variable de entorno PATH antes era:

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

y después de mover el jdk para ser el primero, funcionó:

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

Supongo que el instalador de Windows de Java 1.7 lo instaló en algún otro directorio que ya estaba en la RUTA, por lo que se utilizó primero en lugar de la entrada PATH personalizada especificada C: \ jdk1.6.0_45_32 \ bin;

eternalminerals.com
fuente
gracias hermano. Mover la ruta JAVA_HOME \ bin como primer elemento de la variable Path me salvó la vida.
ÖMER TAŞCI
4

Para mi caso en 'Path'variable, se agregó un parámetro como ' C:\ProgramData\Oracle\Java\javapath;'. Esta ubicación tenía java.exe, javaw.exey javaws.exedesde Java 8, que se instaló recientemente a través jdk.exede Oracle.

He eliminado este texto de la ruta donde mi ruta ya lo tenía %JAVA_HOME%\bin.

Ahora, la variable 'JAVA_HOME'controla mi versión de Java, que es lo que quería.

Muhammadh Aadhil
fuente
4

ingrese la descripción de la imagen aquíSuponga que ha instalado JDK 10 después de JDK 8 y en la variable de entorno del sistema establece una ruta como "C: \ ProgramData \ Oracle \ Java \ javapath" y luego controla la versión de Java por esta ruta. ignorará JAVA_HOME incluso la ruta jdk 1.8 establecida aquí. Así que elimine "C: \ ProgramData \ Oracle \ Java \ javapath" en la ruta para obtener el efecto de la ruta JAVA_HOME

Samir 007
fuente
2

Tenía Java 7 y 8 instalados y quiero redirigir a Java 7, pero la versión de Java en mi ventana del indicador de cmd muestra Java 8. Se
agregó la ruta del directorio bin de Java 7 ( C: \ Program Files \ Java \ jdk1.7.0_10 \ bin ) a la variable PATH al final, pero no funcionó y muestra Java 8. Así que cambié la ruta de Java 7 al inicio del valor de la ruta y funcionó.
Abrí una nueva ventana del indicador de cmd y verifiqué mi versión de Java y ahora muestra Java 7

maniático
fuente
1

Establezca la variable de entorno Path en su directorio jdk / bin deseado

David Levin
fuente
1

En mi caso, tenía Java 7 y 8 (ambos x64) instalados y quiero redirigir a Java 7, pero todo está configurado para usar Java 8. Java usa la variable de entorno PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

como primera opción para buscar su carpeta en tiempo de ejecución (es una carpeta oculta). Esta ruta contiene 3 enlaces simbólicos que no se pueden editar.

En mi PC, la variable de entorno PATH se ve así:

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

En mi caso, debería verse así:

C: \ Windows \ System32; C: \ Archivos de programa \ Java \ jdk1.7.0_21 \ bin;

Tuve que cortar y pegar los enlaces simbólicos en otro lugar para que Java no pueda encontrarlos y pueda restaurarlos más tarde.

Después de configurar las variables de entorno JAVA_HOME y JRE_HOME en los tiempos de ejecución de las carpetas Java deseadas (en mi caso, es Java 7), el comando java -versiondebería mostrar el tiempo de ejecución Java deseado. Observo que no hay necesidad de meterse con el registro.

Probado en Win7 x64.

Ventana rota
fuente
1

Este problema probablemente se deba a las versiones anteriores de Java instaladas en su sistema. Primero verifique sus variables de entorno con cuidado y elimine todas las variables de entorno relacionadas con las versiones anteriores de JAVA y reemplace esas rutas a

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

Aquí hay un factor adicional; Además de los ejecutables java que la instalación de java coloca donde le pida que los coloque, en Windows, el instalador de java también coloca copias de algunos de esos ejecutables en su directorio system32 de Windows, por lo que es probable que esté usando cada uno de los ejecutables java instalado más recientemente.

Ben Brammer
fuente
0

En caso de que esté utilizando el archivo .BAT como servicio de Windows, sugeriría desinstalar el servicio de Windows y volver a instalarlo después de cambiar% JAVA_HOME% para que apunte a la versión correcta de Java.

Aurun
fuente
0

Después de luchar con este problema durante algún tiempo e investigar al respecto, finalmente logré resolverlo siguiendo estos pasos:

1) instale jdk versión 12
2) Cree una nueva variable en la variable de sistemas
3) Nómbrela como JAVA_HOME y proporcione la ruta de instalación de jdk
4) agregue esta variable en la ruta y muévala al principio.
5) vaya a C: \ Archivos de programa (86) \ Common Files \ Oracle \ Java \ javapath y reemplace java.exe y javaw.exe con los archivos correspondientes con los mismos nombres de la carpeta pathtojavajdk / bin

Finalmente, verifiqué la versión predeterminada de java en cmd con "java -version" y funcionó.

Rodrigo Araujo
fuente