J'ai un projet Java qui utilise des liaisons GDAL sur Win7. Le problème est que, en raison de la nature des liaisons, il est nécessaire de définir des variables d'environnement pour fonctionner, en particulier PATH
, GDAL_DATA
, GDAL_DRIVER_PATH
et PROJ_LIB
. Je veux dire qu'ils sont assez faciles pour moi de créer et de pointer vers le répertoire GDAL. Cependant, si jamais je veux distribuer cela, cela va être une étape difficile pour l'utilisateur moyen.Emballage GDAL avec Java
J'ai besoin d'un moyen de configurer les liaisons GDAL de telle sorte que l'utilisateur puisse copier le programme où il veut, avec les bibliothèques jar et GDAL, et le code bootstrap va automatiquement définir GDAL pour trouver ces variables Localisation actuelle.
Maintenant, j'essayé ce qui suit (qui utilise une partie d'une solution posée dans une question similaire: package GDAL JAVA Binding and native library in a SWT plugin):
// define `root` before to grab the path of the where the JAR is located
// bit of a hack-y way to set the classpath
System.setProperty("java.library.path", root+"gdal");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
// set these gdal config variables programatically
gdal.SetConfigOption("GDAL", root + "gdal");
gdal.SetConfigOption("GDAL_DATA", root + "gdal\\gdal_data");
gdal.SetConfigOption("GDAL_DRIVER_PATH", root + "gdal\\gdalplugins");
gdal.SetConfigOption("PROJ_LIB", root + "gdal\\proj_lib");
Mais il échoue dans la première SetConfigOption()
avec l'erreur suivante:
Native library load failed.
java.lang.UnsatisfiedLinkError: C:\...\gdal\gdaljni.dll: Can't find dependent libraries
Ce qui signifie au moins que la première partie fonctionne parce qu'elle localise correctement gdaljni.dll
, mais il semble que avant que le SetConfigOption()
puisse faire son travail, il essaie déjà de regarder dans ces chemins juste pour initialiser et échouer.
Maintenant, si je règle manuellement les variables d'environnement, cela fonctionne bien. fixations
GDAL de: http://www.gisinternals.com/
donc créer fondamentalement un (pour Windows) fichier de chauve-souris, ou peut-être un script VB, qui définit les variables environnementales que l'utilisateur doit fonctionner en premier, presque comme un script 'setup'? Ouais, cela ressemble à la chose la plus proche que je vais probablement obtenir juste à cause de la nature farfelue des liaisons java. Merci! – wowohweewah