Hoy he tenido que compilar GDAL con soporte JAVA JNI en OS X, así que puedo decir que este tutorial es el que funciona para compilar GDAL con JNI en OS X, al menos en la versión 1.11 que es la que he probado.
Y digo que este tutorial es el que funciona porque he tenido que recorrer varias webs y coger un poco de cada sitio hasta que al final he dado con algo que funciona que es lo que voy a explicar a continuación 🙂
Compilar GDAL en OS X
Lo primero es descargar el código fuente de una release de GDAL, mejor NO compilar contra el trunk, a no ser que sepas lo que estás haciendo 🙂
Yo me he descargado la versión 1.11 de GDAL que es la última.
Una vez tenemos el código descomprimido, abre en una nueva pestaña la documentación oficial para compilar GDAL en OS X
Hay que seguir los 4 pasos de la sección “The Framework way” que resumo a continuación:
- Instalar las herramientas de UNIX para Mac. Si tienes xCode o has utilizado MacPorts alguna vez ya las tienes.
- Instalar los pre-requisitos de GDAL de la web de Kyngchaos
- Ejecutar ./configure. En mi caso lo he hecho así:
.
./configure --with-java=/Library/Java/Home --with-threads --disable-static --without-grass --with-jasper=/Library/Frameworks/UnixImageIO.framework/unix --with-libtiff=/Library/Frameworks/UnixImageIO.framework/unix --with-jpeg=/Library/Frameworks/UnixImageIO.framework/unix --with-gif=/Library/Frameworks/UnixImageIO.framework/unix --with-png=/Library/Frameworks/UnixImageIO.framewok/unix --with-geotiff=/Library/Frameworks/UnixImageIO.framework/unix --with-sqlite3=no --with-odbc --with-pcraster=internal --with-geos=/Library/Frameworks/GEOS.framework/unix/bin/geos-config --with-static-proj4=/Library/Frameworks/PROJ.framework/unix --with-expat=/usr/local --with-curl --with-python --with-macosx-framework --with-pg=no CFLAGS="-Os -arch i386 -arch x86_64" CXXFLAGS="-Os -arch i386 -arch x86_64" LDFLAGS="-arch i386 -arch x86_64"
Si no tienes configurado Java te puede interesar leer cómo configurar varias versiones de Java en OS X
- Por último: make & sudo make install
Si todo ha ido bien, debemos tener GDAL instalado en nuestro sistema en esta ruta:
/Library/Frameworks/GDAL.framework/Versions/1.11
Compilar los bindings JNI para usar GDAL desde Java
He seguido más o menos esta documentación que, todo hay que decirlo, no es del todo correcta.
Los pasos para compilar los bindings JNI de GDAL han sido:
- Editar el archivo: gdal/swig/java/java.opt
JAVA_HOME = /Library/Java/Home
JAVADOC=$(JAVA_HOME)/bin/javadoc
JAVAC=$(JAVA_HOME)/bin/javac
JAVA=$(JAVA_HOME)/bin/java
JAR=$(JAVA_HOME)/bin/jar
JAVA_INCLUDE=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin
He marcado en negrita la palabra darwin, ya que de lo contrario no funcionará.
- make & sudo make install
Con esto habrá creado las librerías libgdal*.dylib y las habrá copiado al directorio dónde se ha instalado GDAL:
/Library/Frameworks/GDAL.framework/Versions/1.11
Configurando GDAL en OS X
A continuación hay que exportar el directorio de GDAL al PATH del sistema y también las librerías nativas.
Lo primero, por comodidad es hacer un enlace simbólico tal que así:
ln -s /Library/Frameworks/GDAL.framework/Versions/1.11 /Library/Frameworks/GDAL.framework/Versions/Current
Con esto, nos será más fácil cambiar de versión si en un futuro instalamos por ejemplo la versión 1.12 de GDAL, sólo tendremos que cambiar el enlace simbólico y no habrá que tocar nada más. Esto es una buena práctica que ya hemos utilizado para gestionar varias versiones de Java
A continuación añadimos al PATH:
/Library/Frameworks/GDAL.framework/Versions/Current/Programs
Y creamos una nueva variable de entorno para que encuentre las librerías nativas:
export DYLD_LIBRARY_PATH=/Library/Frameworks/GDAL.framework/Versions/Current
¿Cómo usar GDAL en proyectos Java con Maven?
Bien, una vez hemos llegado aquí, hemos compilado GDAL con soporte Java JNI en OS X, lo hemos instalado y hemos configurado correctamente el PATH.
Si queremos utilizarlo además tenemos que importar el archivo gdal.jar que se ha generado en la carpeta gdal/swig/java en nuestro proyecto Java
Lo suyo sería o bien instalar en local el jar de GDAL, o bien hacer deploy de gdal.jar en un repositorio de Maven que tengamos para desarrollar o como última opción usarlo de manera local así:
Como dato esto lo he probado en OS X Mavericks aunque me imagino que es válido desde la versión Snow Leopard.