Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

599
Vistas
¿Por qué el compilador de Java no se encuentra en $PATH y tampoco en el archivo de encabezado de Java jni.h?

Al construir JPostal emití el comando:

 ./gradlew assemble

Obtuve el siguiente error:

 checking for gcj... no checking for guavac... no checking for jikes... no checking for javac... no configure: error: no acceptable Java compiler found in $PATH make: *** No rule to make target 'install'. Stop. :buildJniLib FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':buildJniLib'. > Process 'command 'sh'' finished with non-zero exit value 2

El problema es que agregué la ruta correcta al compilador de Java a las variables ambientales. De hecho, cuando javac en CMD , muestra todas las opciones de javac como se explica en esta respuesta SO . Escribir javac -version por ejemplo en la línea de comando muestra la versión correcta: javac 1.8.0_191

También configuré las variables ambientales JAVA_HOME como se sugiere en este hilo .

¿Por qué no se detecta el compilador de Java?

ACTUALIZACIÓN 1 :

La salida de los tres comandos para ver la definición actual de Path local , de usuario y del sistema .

Camino local :

 set path Path=C:\x\Java\jdk1.8.0_191\bin;C:\x\ProgramFiles\Firefox;C:\Windows\System32; PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

Ruta de usuario :

 reg query HKCU\Environment /v Path ERROR: The system was unable to find the specified registry key or value.

Ruta del sistema :

 reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment Path REG_SZ C:\x\Java\jdk1.8.0_191\bin;C:\x\ProgramFiles\Firefox;C:\Windows\System32;

Después de publicar la información hasta la ACTUALIZACIÓN 4 , la ruta del sistema se modificó de acuerdo con un consejo con la ventana de diálogo del panel de control Variables de entorno para:

 %SystemRoot%\system32 %SystemRoot% %SystemRoot%\System32\Wbem %SystemRoot%\System32\WindowsPowerShell\v1.0\ %SystemRoot%\System32\OpenSSH\ C:\x\Java\jdk1.8.0_191\bin C:\x\ProgramFiles\Firefox

Consulte la captura de pantalla de la variable ambiental definida por el sistema para Path a continuación:

Rutas de carpetas de la variable de entorno del sistema Path

Nota: no eliminé Firefox porque es necesario por razones internas y no creo que afecte las otras variables definidas.

ACTUALIZACIÓN 2 :

Cuando ejecuto el comando which java en la ventana MSYS2 , obtengo el siguiente resultado:

 which: no java in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)

No entiendo por qué no detecta Java.

ACTUALIZACIÓN 3:

Cuando ejecuto el comando where java en CMD obtengo lo siguiente:

 C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe C:\x\Java\jdk1.8.0_191\bin\java.exe

ACTUALIZACIÓN 4 :

En MSYS2 el comando:

 export PATH=$PATH:"C:\x\Java\jdk1.8.0_191\bin"

y esto pareció resolver el problema con javac :

 checking for javac... javac checking if javac works... yes checking for C:\x\Java\jdk1.8.0_191/include/jni.h... yes

Sin embargo, sigo sin entender por qué no lee correctamente las variables ambientales.

Además, la compilación sigue fallando debido a:

 checking for gcj... no checking for guavac... no checking for jikes... no checking for javac... javac checking if javac works... yes checking for C:\x\Java\jdk1.8.0_191/include/jni.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking for size_t... yes checking for uint16_t... yes checking for GNU libc compatible malloc... yes checking for strdup... yes checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for LIBPOSTAL... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating src/main/c/Makefile config.status: creating config.h config.status: config.h is unchanged config.status: executing depfiles commands config.status: executing libtool commands Making install in src/main/c make[1]: Entering directory '/c/x/ProgramFiles/JPostal/src/main/c' /bin/sh ../../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../../.. -I/mingw64/include -g -O2 -IC:\x\Java\jdk1.8.0_191/include -MT libjpostal_parser_la-jpostal_AddressParser.lo -MD -MP -MF .deps/libjpostal_parser_la-jpostal_AddressParser.Tpo -c -o libjpostal_parser_la-jpostal_AddressParser.lo `test -f 'jpostal_AddressParser.c' || echo './'`jpostal_AddressParser.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../.. -I/mingw64/include -g -O2 -IC:xJavajdk1.8.0_191/include -MT libjpostal_parser_la-jpostal_AddressParser.lo -MD -MP -MF .deps/libjpostal_parser_la-jpostal_AddressParser.Tpo -c jpostal_AddressParser.c -DDLL_EXPORT -DPIC -o .libs/libjpostal_parser_la-jpostal_AddressParser.o jpostal_AddressParser.c:1:10: fatal error: jni.h: No such file or directory 1 | #include <jni.h> | ^~~~~~~ compilation terminated. make[1]: *** [Makefile:473: libjpostal_parser_la-jpostal_AddressParser.lo] Error 1 make[1]: Leaving directory '/c/x/ProgramFiles/JPostal/src/main/c' make: *** [Makefile:404: install-recursive] Error 1

ACTUALIZACIÓN 5 :

Vea la captura de pantalla a continuación que muestra el directorio en el que está instalado Java:

Contenido del directorio C:\x\Java\jdk1.8.0_191

ACTUALIZACIÓN 6 :

La siguiente captura de pantalla muestra el archivo jni.h presente en la carpeta de instalación de Java:

Contenido del directorio C:\x\Java\jdk1.8.0_191\include

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Miraría de cerca cómo funciona su proceso de construcción. Su pregunta dice que está emitiendo un comando 'gradlew', por lo que lo primero que debe verificar es "gradlew --version". Si obtiene la versión esperada de Gradle y Java de eso, entonces todo está bien con su entorno de sistema operativo. Dado que su pregunta también menciona "Make", creo que gradle está invocando Make. Si ese es el caso, vea qué entorno se proporciona (gradle) cuando Make se pone en marcha. La mejor conjetura es que el entorno que está usando 'Make' es de alguna manera diferente al que tiene el sistema operativo. por ejemplo, tiene un $PATH o $JAVA_HOME diferente (o inexistente). Fácil de verificar... en el 'Makefile', haga que genere cosas como 'env' o $PATH o $JAVA_HOME - verifique que sean lo que espera.

over 4 years ago · Santiago Trujillo Denunciar

0

Sugiero usar openJDK porque la ruta se puede configurar automáticamente durante la instalación de openJDK. Por lo tanto, no necesita configurar la ruta para jdk.

Aquí está el enlace: https://adoptopenjdk.net/

puede elegir la versión 8, 11 y 16.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda