Win7 で GDAL バインディングを使用する Java プロジェクトがあります。問題は、バインディングの性質上、特にPATH
、GDAL_DATA
、GDAL_DRIVER_PATH
、およびPROJ_LIB
. つまり、GDAL ディレクトリを作成してポイントするのは簡単です。ただし、これを配布したい場合、これは平均的なユーザーにとって扱いにくいステップになるでしょう。
ユーザーが好きな場所にプログラムをコピーできるように GDAL バインディングを構成する方法が必要です。これには jar と GDAL ライブラリがあり、ブートストラップ コードは GDAL を自動的に設定して、現在の場所に関連するこれらの変数を見つけます。
今、私は次のことを試しました(これは、非常によく似た質問で提起されたソリューションの一部を使用しています: SWTプラグインのGDAL JAVAバインディングとネイティブライブラリをパッケージ化します):
// 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");
しかし、最初SetConfigOption()
は次のエラーで失敗します。
Native library load failed.
java.lang.UnsatisfiedLinkError: C:\...\gdal\gdaljni.dll: Can't find dependent libraries
これは、少なくとも最初の部分が適切に配置されているため機能していることを意味しますがgdaljni.dll
、SetConfigOption()
初期化して失敗するためだけにこれらのパスを調べようとしているようです。
環境変数を手動で設定すると、明らかに正常に動作します。
GDAL バインディング: http://www.gisinternals.com/