Al construir JPostal emití el comando:
./gradlew assembleObtuve 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;.MSCRuta 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:
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.exeACTUALIZACIÓ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... yesSin 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 1ACTUALIZACIÓN 5 :
Vea la captura de pantalla a continuación que muestra el directorio en el que está instalado Java:
ACTUALIZACIÓN 6 :
La siguiente captura de pantalla muestra el archivo jni.h presente en la carpeta de instalación de Java:
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.
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.